diff --git a/deploy/crds/vms-crd.yaml b/deploy/crds/vms-crd.yaml index 2e2d98f..e72f860 100644 --- a/deploy/crds/vms-crd.yaml +++ b/deploy/crds/vms-crd.yaml @@ -431,13 +431,13 @@ spec: type: string type: object type: object - cdromImage: + cdrom: type: object properties: - path: + image: type: string required: - - path + - image bootindex: type: integer oneOf: @@ -446,9 +446,9 @@ spec: required: - volumeClaimTemplate - properties: - cdromImage: + cdrom: required: - - cdromImage + - cdrom default: [] display: type: object diff --git a/org.jdrupes.vmoperator.manager/resources/org/jdrupes/vmoperator/manager/runnerConfig.ftl.yaml b/org.jdrupes.vmoperator.manager/resources/org/jdrupes/vmoperator/manager/runnerConfig.ftl.yaml index 0104211..9c95635 100644 --- a/org.jdrupes.vmoperator.manager/resources/org/jdrupes/vmoperator/manager/runnerConfig.ftl.yaml +++ b/org.jdrupes.vmoperator.manager/resources/org/jdrupes/vmoperator/manager/runnerConfig.ftl.yaml @@ -151,9 +151,9 @@ data: <#assign drvCounter = drvCounter + 1/> - <#if disk.cdromImage??> + <#if disk.cdrom??> - type: ide-cd - file: "${ disk.cdromImage.path.asString }" + file: "${ disk.cdrom.image.asString }" <#if disk.bootindex??> bootindex: ${ disk.bootindex.asInt?c } diff --git a/org.jdrupes.vmoperator.manager/resources/org/jdrupes/vmoperator/manager/runnerPod.ftl.yaml b/org.jdrupes.vmoperator.manager/resources/org/jdrupes/vmoperator/manager/runnerPod.ftl.yaml index 905e53c..92beea0 100644 --- a/org.jdrupes.vmoperator.manager/resources/org/jdrupes/vmoperator/manager/runnerPod.ftl.yaml +++ b/org.jdrupes.vmoperator.manager/resources/org/jdrupes/vmoperator/manager/runnerPod.ftl.yaml @@ -32,7 +32,7 @@ spec: - name: vm-data mountPath: /var/local/vm-data - name: vmop-image-repository - mountPath: /var/local/vmop-image-repository + mountPath: ${ constants.IMAGE_REPO_PATH } volumeDevices: <#assign diskCounter = 0/> <#list cr.spec.vm.disks.asList() as disk> diff --git a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Constants.java b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Constants.java index 5c5cf3f..8ace35f 100644 --- a/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Constants.java +++ b/org.jdrupes.vmoperator.manager/src/org/jdrupes/vmoperator/manager/Constants.java @@ -41,4 +41,7 @@ public class Constants { /** The Constant STATE_STOPPED. */ public static final String STATE_STOPPED = "Stopped"; + /** The Constant IMAGE_REPO_PATH. */ + public static final String IMAGE_REPO_PATH + = "/var/local/vmop-image-repository"; } 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 58f0717..d555686 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 @@ -18,6 +18,8 @@ package org.jdrupes.vmoperator.manager; +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; import freemarker.core.ParseException; import freemarker.template.Configuration; import freemarker.template.DefaultObjectWrapperBuilder; @@ -108,7 +110,7 @@ public class Reconciler extends Component { // Prepare Freemarker model model = new HashMap<>(); - model.put("cr", vmDef.getRaw()); + model.put("cr", patchCr(vmDef.getRaw().deepCopy())); model.put("constants", (TemplateHashModel) new DefaultObjectWrapperBuilder( Configuration.VERSION_2_3_32) @@ -130,4 +132,22 @@ public class Reconciler extends Component { } } + private Object patchCr(JsonObject vmDef) { + // Adjust cdromImage path + var disks + = GsonPtr.to(vmDef).to("spec", "vm", "disks").get(JsonArray.class); + for (var disk : disks) { + var cdrom = (JsonObject) ((JsonObject) disk).get("cdrom"); + if (cdrom == null) { + continue; + } + String image = cdrom.get("image").getAsString(); + if (!image.contains("/")) { + cdrom.addProperty("image", + Constants.IMAGE_REPO_PATH + "/" + image); + } + } + return vmDef; + } + }