diff --git a/tests/data/cli/compare/virt-install-boot-container.xml b/tests/data/cli/compare/virt-install-boot-container.xml index bc8107169..a4acc0c4f 100644 --- a/tests/data/cli/compare/virt-install-boot-container.xml +++ b/tests/data/cli/compare/virt-install-boot-container.xml @@ -6,15 +6,15 @@ 1 hvm - /my/custom/cwd - tester - 1000 - /bin/systemd --unit emergency.service some value bar + /my/custom/cwd + tester + 1000 + diff --git a/tests/data/cli/compare/virt-install-boot-guest-loader-bios.xml b/tests/data/cli/compare/virt-install-boot-guest-loader-bios.xml index ae9572bce..c1bbdad77 100644 --- a/tests/data/cli/compare/virt-install-boot-guest-loader-bios.xml +++ b/tests/data/cli/compare/virt-install-boot-guest-loader-bios.xml @@ -6,7 +6,7 @@ 1 hvm - /path/to/loader + /path/to/loader diff --git a/tests/data/cli/compare/virt-install-boot-guest-loader-efi.xml b/tests/data/cli/compare/virt-install-boot-guest-loader-efi.xml index d3a213136..fd4b4c4f3 100644 --- a/tests/data/cli/compare/virt-install-boot-guest-loader-efi.xml +++ b/tests/data/cli/compare/virt-install-boot-guest-loader-efi.xml @@ -6,7 +6,7 @@ 1 hvm - /path/to/loader + /path/to/loader /path/to/nvram diff --git a/tests/data/cli/compare/virt-install-boot-uefi.xml b/tests/data/cli/compare/virt-install-boot-uefi.xml index c97f86fc8..83e5c1dde 100644 --- a/tests/data/cli/compare/virt-install-boot-uefi.xml +++ b/tests/data/cli/compare/virt-install-boot-uefi.xml @@ -6,7 +6,7 @@ 1 hvm - /usr/share/ovmf/OVMF_CODE.secboot.fd + /usr/share/ovmf/OVMF_CODE.secboot.fd diff --git a/tests/data/cli/compare/virt-install-singleton-config-1.xml b/tests/data/cli/compare/virt-install-singleton-config-1.xml index 49e0cd856..f7430de20 100644 --- a/tests/data/cli/compare/virt-install-singleton-config-1.xml +++ b/tests/data/cli/compare/virt-install-singleton-config-1.xml @@ -23,11 +23,11 @@ hvm /usr/share/OVMF/OVMF_CODE.fd + foo + bar=baz - foo - bar=baz diff --git a/tests/data/cli/compare/virt-install-singleton-config-2.xml b/tests/data/cli/compare/virt-install-singleton-config-2.xml index 40dcf8e60..0107a4a7d 100644 --- a/tests/data/cli/compare/virt-install-singleton-config-2.xml +++ b/tests/data/cli/compare/virt-install-singleton-config-2.xml @@ -93,20 +93,20 @@ /new/bootld hvm - /foo/bar - /my/custom/cwd - tester - 1000 - - - - + /foo/bar foo=bar baz=woo + /my/custom/cwd + tester + 1000 + + + + @@ -345,7 +345,13 @@ /new/bootld hvm + + + + /foo/bar + foo=bar + baz=woo /my/custom/cwd tester 1000 @@ -353,15 +359,9 @@ - - - - - - foo=bar - baz=woo + diff --git a/tests/data/cli/compare/virt-install-singleton-config-3.xml b/tests/data/cli/compare/virt-install-singleton-config-3.xml index 46e7ce406..45d63a02b 100644 --- a/tests/data/cli/compare/virt-install-singleton-config-3.xml +++ b/tests/data/cli/compare/virt-install-singleton-config-3.xml @@ -46,9 +46,9 @@ /tmp/foo root=/foo - + diff --git a/tests/data/cli/compare/virt-xml-edit-simple-boot.xml b/tests/data/cli/compare/virt-xml-edit-simple-boot.xml index 142a8c0dd..80c05a7cd 100644 --- a/tests/data/cli/compare/virt-xml-edit-simple-boot.xml +++ b/tests/data/cli/compare/virt-xml-edit-simple-boot.xml @@ -4,8 +4,8 @@ - /usr/lib/xen/boot/hvmloader + foo.bar + /test/nvram.img -+ + /bin/bash ++ diff --git a/tests/data/xmlparse/change-guest-out.xml b/tests/data/xmlparse/change-guest-out.xml index 457156550..9fbb06fdc 100644 --- a/tests/data/xmlparse/change-guest-out.xml +++ b/tests/data/xmlparse/change-guest-out.xml @@ -11,13 +11,13 @@ xen /foo/loader - /sbin/init - - foo bar baz frib + + + diff --git a/virtinst/cli.py b/virtinst/cli.py index fe22ee8db..bc8df22a3 100644 --- a/virtinst/cli.py +++ b/virtinst/cli.py @@ -2659,7 +2659,9 @@ class ParserBoot(VirtCLIParser): cls.add_arg("network", None, lookup_cb=None, cb=cls.noset_cb) # UEFI depends on these bits, so set them first + cls.add_arg("os_type", "os_type") cls.add_arg("arch", "arch") + cls.add_arg("machine", "machine") cls.add_arg("bootloader", None, lookup_cb=None, cb=cls.set_bootloader_cb) cls.add_arg("bootloader_args", None, lookup_cb=None, @@ -2670,9 +2672,30 @@ class ParserBoot(VirtCLIParser): cb=cls.set_emulator_cb) cls.add_arg("uefi", None, lookup_cb=None, cb=cls.set_uefi_cb) - cls.add_arg("os_type", "os_type") - cls.add_arg("machine", "machine") + # Common/Shared boot options + cls.add_arg("loader", "loader") + cls.add_arg("loader.readonly", "loader_ro", is_onoff=True) + cls.add_arg("loader.type", "loader_type") + cls.add_arg("loader.secure", "loader_secure", is_onoff=True) + + # Guest-Based bootloader options + cls.add_arg("firmware", "firmware") + cls.add_arg("firmware.feature[0-9]*.enabled", "enabled", + find_inst_cb=cls.feature_find_inst_cb, is_onoff=True) + cls.add_arg("firmware.feature[0-9]*.name", "name", + find_inst_cb=cls.feature_find_inst_cb) + cls.add_arg("nvram", "nvram") + cls.add_arg("nvram.template", "nvram_template") + cls.add_arg("boot[0-9]*.dev", "dev", + find_inst_cb=cls.boot_find_inst_cb) + cls.add_arg("bootmenu.enable", "bootmenu_enable", is_onoff=True) + cls.add_arg("bootmenu.timeout", "bootmenu_timeout") + cls.add_arg("bios.useserial", "bios_useserial", is_onoff=True) + cls.add_arg("bios.rebootTimeout", "bios_rebootTimeout") + cls.add_arg("smbios.mode", "smbios_mode") + + # Direct kernel boot options cls.add_arg("kernel", "kernel") cls.add_arg("initrd", "initrd") cls.add_arg("cmdline", "kernel_args", can_comma=True) @@ -2680,17 +2703,7 @@ class ParserBoot(VirtCLIParser): cls.add_arg("acpi.table", "acpi_tb") cls.add_arg("acpi.table.type", "acpi_tb_type") - cls.add_arg("firmware", "firmware") - cls.add_arg("firmware.feature[0-9]*.enabled", "enabled", - find_inst_cb=cls.feature_find_inst_cb, is_onoff=True) - cls.add_arg("firmware.feature[0-9]*.name", "name", - find_inst_cb=cls.feature_find_inst_cb) - cls.add_arg("boot[0-9]*.dev", "dev", - find_inst_cb=cls.boot_find_inst_cb) - cls.add_arg("bootmenu.enable", "bootmenu_enable", is_onoff=True) - cls.add_arg("bootmenu.timeout", "bootmenu_timeout") - cls.add_arg("bios.useserial", "bios_useserial", is_onoff=True) - cls.add_arg("bios.rebootTimeout", "bios_rebootTimeout") + # Container boot options cls.add_arg("init", "init") cls.add_arg("initargs", "initargs", cb=cls.set_initargs_cb) cls.add_arg("initarg[0-9]*", "val", @@ -2702,13 +2715,6 @@ class ParserBoot(VirtCLIParser): cls.add_arg("initdir", "initdir") cls.add_arg("inituser", "inituser") cls.add_arg("initgroup", "initgroup") - cls.add_arg("loader", "loader") - cls.add_arg("loader.readonly", "loader_ro", is_onoff=True) - cls.add_arg("loader.type", "loader_type") - cls.add_arg("loader.secure", "loader_secure", is_onoff=True) - cls.add_arg("nvram", "nvram") - cls.add_arg("nvram.template", "nvram_template") - cls.add_arg("smbios.mode", "smbios_mode") ################### diff --git a/virtinst/domain/os.py b/virtinst/domain/os.py index 2e65a5236..e2cea7554 100644 --- a/virtinst/domain/os.py +++ b/virtinst/domain/os.py @@ -78,13 +78,30 @@ class DomainOs(XMLBuilder): def is_riscv_virt(self): return self.is_riscv() and str(self.machine).startswith("virt") - XML_NAME = "os" - _XML_PROP_ORDER = ["arch", "os_type", "loader", "loader_ro", "loader_type", - "nvram", "nvram_template", "kernel", "initrd", - "initdir", "inituser", "initgroup", - "kernel_args", "dtb", "bootdevs", "smbios_mode"] + ################## + # XML properties # + ################## - # BIOS bootloader + XML_NAME = "os" + _XML_PROP_ORDER = [ + "firmware", "os_type", "arch", "machine", "firmware_features", + "loader", "loader_ro", "loader_secure", "loader_type", + "nvram", "nvram_template", + "init", "initargs", "initenvs", "initdir", "inituser", "initgroup", + "kernel", "initrd", "kernel_args", "dtb", "acpi_tb", "acpi_tb_type", + "bootdevs", "bootmenu_enable", "bootmenu_timeout", + "bios_useserial", "bios_rebootTimeout", "smbios_mode"] + + # Shared/Generic boot options + os_type = XMLProperty("./type") + arch = XMLProperty("./type/@arch") + machine = XMLProperty("./type/@machine") + loader = XMLProperty("./loader") + loader_ro = XMLProperty("./loader/@readonly", is_yesno=True) + loader_type = XMLProperty("./loader/@type") + loader_secure = XMLProperty("./loader/@secure", is_yesno=True) + + # BIOS bootloader options def _get_bootorder(self): return [dev.dev for dev in self.bootdevs] def _set_bootorder(self, newdevs): @@ -96,18 +113,22 @@ class DomainOs(XMLBuilder): dev.dev = d bootorder = property(_get_bootorder, _set_bootorder) bootdevs = XMLChildProperty(_BootDevice) - smbios_mode = XMLProperty("./smbios/@mode") + firmware = XMLProperty("./@firmware") + firmware_features = XMLChildProperty(_FirmwareFeature, relative_xpath="./firmware") + nvram = XMLProperty("./nvram", do_abspath=True) + nvram_template = XMLProperty("./nvram/@template") bootmenu_enable = XMLProperty("./bootmenu/@enable", is_yesno=True) bootmenu_timeout = XMLProperty("./bootmenu/@timeout", is_int=True) - bios_rebootTimeout = XMLProperty("./bios/@rebootTimeout", is_int=True) bios_useserial = XMLProperty("./bios/@useserial", is_yesno=True) + bios_rebootTimeout = XMLProperty("./bios/@rebootTimeout", is_int=True) + smbios_mode = XMLProperty("./smbios/@mode") - # Host bootloader + # Host bootloader options # Since the elements for a host bootloader are actually directly under # rather than , they are handled via callbacks in # the CLI. This is just a placeholder to remind of that fact. - # Direct kernel boot + # Direct kernel boot options kernel = XMLProperty("./kernel", do_abspath=True) initrd = XMLProperty("./initrd", do_abspath=True) kernel_args = XMLProperty("./cmdline") @@ -115,7 +136,7 @@ class DomainOs(XMLBuilder): acpi_tb = XMLProperty("./acpi/table", do_abspath=True) acpi_tb_type = XMLProperty("./acpi/table/@type") - # Container boot + # Container boot options init = XMLProperty("./init") initargs = XMLChildProperty(_InitArg) initenvs = XMLChildProperty(_InitEnv) @@ -130,18 +151,6 @@ class DomainOs(XMLBuilder): obj = self.initargs.add_new() obj.val = val - loader = XMLProperty("./loader") - loader_ro = XMLProperty("./loader/@readonly", is_yesno=True) - loader_type = XMLProperty("./loader/@type") - loader_secure = XMLProperty("./loader/@secure", is_yesno=True) - nvram = XMLProperty("./nvram", do_abspath=True) - nvram_template = XMLProperty("./nvram/@template") - arch = XMLProperty("./type/@arch") - machine = XMLProperty("./type/@machine") - os_type = XMLProperty("./type") - firmware = XMLProperty("./@firmware") - firmware_features = XMLChildProperty(_FirmwareFeature, relative_xpath="./firmware") - ################## # Default config #