summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugues Fafard <fafardh@posteo.de>2021-07-28 15:49:38 +0200
committerCole Robinson <crobinso@redhat.com>2021-07-29 11:44:57 -0400
commitedf6c3ff2ef1b5ee13b95cad8c9407ea3f2947a0 (patch)
tree560a835f44e5c56ac580c16339440d1917835d2f
parent7bc4ba81fff7e4e9c532a6a993b164c4afb647da (diff)
downloadvirt-manager-edf6c3ff2ef1b5ee13b95cad8c9407ea3f2947a0.tar.gz
cli: --boot: Completed options for container boot
Adds support for `initenv[0-9]*.name` and `initenv[0-9]*` suboptions.
-rw-r--r--tests/data/cli/compare/virt-install-boot-container.xml36
-rw-r--r--tests/test_cli.py1
-rw-r--r--virtinst/cli.py10
-rw-r--r--virtinst/domain/os.py16
4 files changed, 59 insertions, 4 deletions
diff --git a/tests/data/cli/compare/virt-install-boot-container.xml b/tests/data/cli/compare/virt-install-boot-container.xml
new file mode 100644
index 00000000..bc810716
--- /dev/null
+++ b/tests/data/cli/compare/virt-install-boot-container.xml
@@ -0,0 +1,36 @@
+<domain type="test">
+ <name>vm1</name>
+ <uuid>00000000-1111-2222-3333-444444444444</uuid>
+ <memory>65536</memory>
+ <currentMemory>65536</currentMemory>
+ <vcpu>1</vcpu>
+ <os>
+ <type arch="i686">hvm</type>
+ <initdir>/my/custom/cwd</initdir>
+ <inituser>tester</inituser>
+ <initgroup>1000</initgroup>
+ <boot dev="hd"/>
+ <init>/bin/systemd</init>
+ <initarg>--unit</initarg>
+ <initarg>emergency.service</initarg>
+ <initenv name="MYENV">some value</initenv>
+ <initenv name="FOO">bar</initenv>
+ </os>
+ <features>
+ <pae/>
+ </features>
+ <clock offset="utc"/>
+ <pm>
+ <suspend-to-mem enabled="no"/>
+ <suspend-to-disk enabled="no"/>
+ </pm>
+ <devices>
+ <emulator>/usr/bin/test-hv</emulator>
+ <controller type="usb" model="none"/>
+ <interface type="user">
+ <mac address="00:11:22:33:44:55"/>
+ <model type="e1000"/>
+ </interface>
+ <console type="pty"/>
+ </devices>
+</domain>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 1ded9adf..82e9ba5e 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -760,6 +760,7 @@ c.add_compare("--boot firmware=bios,loader=/path/to/loader,loader.readonly=yes,l
c.add_compare("--boot firmware=efi,loader=/path/to/loader,loader.readonly=yes,loader.secure=yes,loader.type=pflash,bios.useserial=yes,nvram=/path/to/nvram", "boot-guest-loader-efi")
c.add_compare("--boot bootloader=/usr/bin/pygrub,bootloader_args='--append single'", "boot-host-loader")
c.add_compare("--boot kernel=/path/to/kernel,initrd=/path/to/initrd,cmdline='console=ttyS0',dtb=/path/to/dtb,acpi.table=/path/to/slic.dat,acpi.table.type=slic", "boot-direct-kernel")
+c.add_compare("--boot init=/bin/systemd,initargs='--unit emergency.service',initenv0.name=MYENV,initenv0='some value',initenv1.name=FOO,initenv1=bar,initdir=/my/custom/cwd,inituser=tester,initgroup=1000", "boot-container")
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 2f6493a4..fe22ee8d 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -2635,6 +2635,12 @@ class ParserBoot(VirtCLIParser):
cb = self._make_find_inst_cb(cliarg, list_propname)
return cb(*args, **kwargs)
+ def initenv_find_inst_cb(self, *args, **kwargs):
+ cliarg = "initenv" # initenv[0-9]*
+ list_propname = "initenvs" # os.initenvs
+ cb = self._make_find_inst_cb(cliarg, list_propname)
+ return cb(*args, **kwargs)
+
def feature_find_inst_cb(self, *args, **kwargs):
cliarg = "feature" # firmware.feature[0-9]*
list_propname = "firmware_features" # os.firmware_features
@@ -2689,6 +2695,10 @@ class ParserBoot(VirtCLIParser):
cls.add_arg("initargs", "initargs", cb=cls.set_initargs_cb)
cls.add_arg("initarg[0-9]*", "val",
find_inst_cb=cls.initarg_find_inst_cb)
+ cls.add_arg("initenv[0-9]*", "value",
+ find_inst_cb=cls.initenv_find_inst_cb)
+ cls.add_arg("initenv[0-9]*.name", "name",
+ find_inst_cb=cls.initenv_find_inst_cb)
cls.add_arg("initdir", "initdir")
cls.add_arg("inituser", "inituser")
cls.add_arg("initgroup", "initgroup")
diff --git a/virtinst/domain/os.py b/virtinst/domain/os.py
index a3f5c55d..2e65a523 100644
--- a/virtinst/domain/os.py
+++ b/virtinst/domain/os.py
@@ -12,6 +12,12 @@ class _InitArg(XMLBuilder):
val = XMLProperty(".")
+class _InitEnv(XMLBuilder):
+ XML_NAME = "initenv"
+ name = XMLProperty("./@name")
+ value = XMLProperty(".")
+
+
class _BootDevice(XMLBuilder):
XML_NAME = "boot"
dev = XMLProperty("./@dev")
@@ -109,7 +115,13 @@ class DomainOs(XMLBuilder):
acpi_tb = XMLProperty("./acpi/table", do_abspath=True)
acpi_tb_type = XMLProperty("./acpi/table/@type")
+ # Container boot
+ init = XMLProperty("./init")
initargs = XMLChildProperty(_InitArg)
+ initenvs = XMLChildProperty(_InitEnv)
+ initdir = XMLProperty("./initdir")
+ inituser = XMLProperty("./inituser")
+ initgroup = XMLProperty("./initgroup")
def set_initargs_string(self, argstring):
import shlex
for obj in self.initargs:
@@ -118,10 +130,6 @@ class DomainOs(XMLBuilder):
obj = self.initargs.add_new()
obj.val = val
- init = XMLProperty("./init")
- initdir = XMLProperty("./initdir")
- inituser = XMLProperty("./inituser")
- initgroup = XMLProperty("./initgroup")
loader = XMLProperty("./loader")
loader_ro = XMLProperty("./loader/@readonly", is_yesno=True)
loader_type = XMLProperty("./loader/@type")