diff --git a/org.jdrupes.vmoperator.runner.qemu/config-sample.yaml b/org.jdrupes.vmoperator.runner.qemu/config-sample.yaml index 2211fed..4dc87a2 100644 --- a/org.jdrupes.vmoperator.runner.qemu/config-sample.yaml +++ b/org.jdrupes.vmoperator.runner.qemu/config-sample.yaml @@ -34,9 +34,12 @@ # ... # "userData": # ... + # "networkConfig": + # ... # # If .metaData.instance-id is missing, an id is generated from the - # config file's modification timestamp. + # config file's modification timestamp. .userData and .networkConfig + # are optional. # Define the VM (required) "vm": diff --git a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Configuration.java b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Configuration.java index ba36317..192b44c 100644 --- a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Configuration.java +++ b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Configuration.java @@ -88,6 +88,8 @@ public class Configuration implements Dto { public Map metaData; @SuppressWarnings("PMD.UseConcurrentHashMap") public Map userData; + @SuppressWarnings("PMD.UseConcurrentHashMap") + public Map networkConfig; } /** diff --git a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java index 5df2d4b..d615ad6 100644 --- a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java +++ b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java @@ -503,6 +503,13 @@ public class Runner extends Component { config.cloudInit.userData); } userOut.close(); + if (config.cloudInit.networkConfig != null) { + var networkConfig = Files.newBufferedWriter( + cloudInitDir.resolve("network-config")); + yamlMapper.writer().writeValue(networkConfig, + config.cloudInit.networkConfig); + networkConfig.close(); + } startProcess(cloudInitImgDefinition); } catch (IOException e) { logger.log(Level.SEVERE, e, diff --git a/org.jdrupes.vmoperator.runner.qemu/templates/Standard-VM-latest.ftl.yaml b/org.jdrupes.vmoperator.runner.qemu/templates/Standard-VM-latest.ftl.yaml index dff656a..aa7f49e 100644 --- a/org.jdrupes.vmoperator.runner.qemu/templates/Standard-VM-latest.ftl.yaml +++ b/org.jdrupes.vmoperator.runner.qemu/templates/Standard-VM-latest.ftl.yaml @@ -23,6 +23,9 @@ mformat -C -f 1440 -v CIDATA -i ${ runtimeDir }/cloud-init.img && mcopy -i ${ runtimeDir }/cloud-init.img ${ dataDir }/cloud-init/meta-data ${ dataDir }/cloud-init/user-data :: + && if [ -r ${ dataDir }/cloud-init/network-config ]; then + mcopy -i ${ runtimeDir }/cloud-init.img + ${ dataDir }/cloud-init/network-config :: ; fi "qemu": # Candidate paths for the executable