From ee96f869daebbbf95ec5fcfb26ea8cb4553944ed Mon Sep 17 00:00:00 2001 From: "Michael N. Lipp" Date: Sun, 18 Feb 2024 13:35:31 +0100 Subject: [PATCH] Add generation of fallback properties. --- dev-example/test-vm.yaml | 2 ++ .../vmoperator/manager/Reconciler.java | 28 +++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/dev-example/test-vm.yaml b/dev-example/test-vm.yaml index 0cd820b..5913020 100644 --- a/dev-example/test-vm.yaml +++ b/dev-example/test-vm.yaml @@ -14,6 +14,8 @@ spec: cpu: 1 memory: 2Gi + cloudInit: {} + vm: # state: Running bootMenu: yes diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java index c3fee7d..2adb843 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Reconciler.java @@ -209,6 +209,15 @@ public class Reconciler extends Component { private DynamicKubernetesObject patchCr(DynamicKubernetesObject vmDef) { var json = vmDef.getRaw().deepCopy(); // Adjust cdromImage path + adjustCdRomPaths(json); + + // Adjust cloud-init data + adjustCloudInitData(json); + + return new DynamicKubernetesObject(json); + } + + private void adjustCdRomPaths(JsonObject json) { var disks = GsonPtr.to(json).to("spec", "vm", "disks").get(JsonArray.class); for (var disk : disks) { @@ -233,7 +242,23 @@ public class Reconciler extends Component { logger.warning(() -> "Invalid CDROM image: " + image); } } - return new DynamicKubernetesObject(json); + } + + private void adjustCloudInitData(JsonObject json) { + var spec = GsonPtr.to(json).to("spec").get(JsonObject.class); + if (!spec.has("cloudInit")) { + return; + } + var metaData = GsonPtr.to(spec).to("cloudInit", "metaData"); + if (metaData.getAsString("instance-id").isEmpty()) { + metaData.set("instance-id", + GsonPtr.to(json).getAsString("metadata", "resourceVersion") + .map(s -> "v" + s).orElse("v1")); + } + if (metaData.getAsString("local-hostname").isEmpty()) { + metaData.set("local-hostname", + GsonPtr.to(json).getAsString("metadata", "name").get()); + } } @SuppressWarnings("PMD.CognitiveComplexity") @@ -300,5 +325,4 @@ public class Reconciler extends Component { }); return model; } - }