Fix Running/Stopped behavior.
This commit is contained in:
parent
97225b1c01
commit
af49c952fd
1 changed files with 31 additions and 18 deletions
|
|
@ -66,28 +66,41 @@ import org.jdrupes.vmoperator.manager.VmDefChanged.Type;
|
||||||
DynamicKubernetesApi stsApi = new DynamicKubernetesApi("apps", "v1",
|
DynamicKubernetesApi stsApi = new DynamicKubernetesApi("apps", "v1",
|
||||||
"statefulsets", channel.client());
|
"statefulsets", channel.client());
|
||||||
|
|
||||||
// Maybe delete
|
// If exists, adjust replicas
|
||||||
|
var metadata = event.object().getMetadata();
|
||||||
|
var existing = K8s.get(stsApi, metadata);
|
||||||
|
if (existing.isPresent()) {
|
||||||
|
var current = GsonPtr.to(existing.get().getRaw())
|
||||||
|
.to("spec").getAsInt("replicas").orElse(1);
|
||||||
|
int desired;
|
||||||
|
if (event.type() == Type.DELETED) {
|
||||||
|
desired = 0;
|
||||||
|
} else {
|
||||||
|
var state = GsonPtr.to((JsonObject) model.get("cr"))
|
||||||
|
.to("spec", "vm").getAsString("state").orElse("Stopped");
|
||||||
|
desired = "Running".equals(state) ? 1 : 0;
|
||||||
|
}
|
||||||
|
if (desired != current) {
|
||||||
|
PatchOptions opts = new PatchOptions();
|
||||||
|
opts.setFieldManager("kubernetes-java-kubectl-apply");
|
||||||
|
stsApi.patch(metadata.getNamespace(), metadata.getName(),
|
||||||
|
V1Patch.PATCH_FORMAT_JSON_PATCH,
|
||||||
|
new V1Patch("[{\"op\": \"replace\", \"path\": "
|
||||||
|
+ "\"/spec/replicas\", \"value\": " + desired + "}]"),
|
||||||
|
opts).throwsApiException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Maybe delete (replicas have been set to 0)
|
||||||
if (event.type() == Type.DELETED) {
|
if (event.type() == Type.DELETED) {
|
||||||
var meta = GsonPtr.to((JsonObject) model.get("cr")).to("metadata");
|
stsApi.delete(metadata.getNamespace(), metadata.getName())
|
||||||
PatchOptions opts = new PatchOptions();
|
.throwsApiException();
|
||||||
opts.setFieldManager("kubernetes-java-kubectl-apply");
|
|
||||||
stsApi.patch(meta.getAsString("namespace").get(),
|
|
||||||
meta.getAsString("name").get(), V1Patch.PATCH_FORMAT_JSON_PATCH,
|
|
||||||
new V1Patch("[{\"op\": \"replace\", "
|
|
||||||
+ "\"path\": \"/spec/replicas\", \"value\": 0}]"),
|
|
||||||
opts).throwsApiException();
|
|
||||||
stsApi.delete(meta.getAsString("namespace").get(),
|
|
||||||
meta.getAsString("name").get()).throwsApiException();
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Never change existing if replicas is greater 0 (would cause
|
// Apart from replicas, only properties that are of no interest
|
||||||
// update and thus VM restart). Apply will happen when replicas
|
// may be changed for an existing stateful set.
|
||||||
// changes from 0 to 1, i.e. on next powerdown/powerup.
|
if (existing.isPresent()) {
|
||||||
var metadata = event.object().getMetadata();
|
|
||||||
var existing = K8s.get(stsApi, metadata);
|
|
||||||
if (existing.isPresent() && GsonPtr.to(existing.get().getRaw())
|
|
||||||
.to("spec").getAsInt("replicas").orElse(1) > 0) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue