diff --git a/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml b/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
index ee4d0411f..63f659e6a 100644
--- a/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
+++ b/tests/cli-test-xml/compare/virt-install-singleton-config-2.xml
@@ -70,6 +70,11 @@
chasset
chassku
+
+ test0
+ test1
+ complicated parsing, foo=bar
+
/new/bootld
@@ -265,6 +270,11 @@
chasset
chassku
+
+ test0
+ test1
+ complicated parsing, foo=bar
+
/new/bootld
diff --git a/tests/clitest.py b/tests/clitest.py
index 02f913e53..ef1c16a1a 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -462,6 +462,7 @@ cache.mode=emulate,cache.level=3
--sysinfo type=smbios,system_manufacturer="Acme Inc.",system_product=Computer,system_version=3.2.1,system_serial=123456789,system_uuid=00000000-1111-2222-3333-444444444444,system_sku=abc-123,system_family=Server
--sysinfo type=smbios,baseBoard_manufacturer="Acme Corp.",baseBoard_product=Motherboard,baseBoard_version=A01,baseBoard_serial=1234-5678,baseBoard_asset=Tag,baseBoard_location=Chassis
--sysinfo type=smbios,chassis.manufacturer="Chassis Corp.",chassis.serial=1234chassis,chassis.asset=chasset,chassis.sku=chassku,chassis.version=4.0
+--sysinfo type=smbios,oemStrings.entry2="complicated parsing, foo=bar",oemStrings.entry1=test1,oemStrings.entry0=test0
--pm suspend_to_mem=yes,suspend_to_disk=no
--resource partition=/virtualmachines/production
--events on_poweroff=destroy,on_reboot=restart,on_crash=preserve,on_lockfailure=ignore
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 2b961583a..12775c06d 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -2382,6 +2382,13 @@ class ParserSysinfo(VirtCLIParser):
inst.system_uuid = val
self.guest.uuid = val
+ def oem_find_inst_cb(self, *args, **kwargs):
+ # pylint: disable=protected-access
+ cliarg = "entry" # oemStrings.entry[0-9]*
+ list_propname = "oemStrings" # sysinfo.oemStrings
+ cb = self._make_find_inst_cb(cliarg, list_propname)
+ return cb(*args, **kwargs)
+
@classmethod
def _init_class(cls, **kwargs):
VirtCLIParser._init_class(**kwargs)
@@ -2417,6 +2424,9 @@ class ParserSysinfo(VirtCLIParser):
cls.add_arg("chassis.asset", "chassis_asset")
cls.add_arg("chassis.sku", "chassis_sku")
+ cls.add_arg("oemStrings.entry[0-9]", "value", can_comma=True,
+ find_inst_cb=cls.oem_find_inst_cb)
+
##############################
# --qemu-commandline parsing #
diff --git a/virtinst/domain/sysinfo.py b/virtinst/domain/sysinfo.py
index 0925474de..c2eb147f3 100644
--- a/virtinst/domain/sysinfo.py
+++ b/virtinst/domain/sysinfo.py
@@ -5,7 +5,12 @@
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
-from ..xmlbuilder import XMLBuilder, XMLProperty
+from ..xmlbuilder import XMLBuilder, XMLChildProperty, XMLProperty
+
+
+class _SysinfoEntry(XMLBuilder):
+ XML_NAME = "entry"
+ value = XMLProperty(".")
class DomainSysinfo(XMLBuilder):
@@ -21,7 +26,7 @@ class DomainSysinfo(XMLBuilder):
"baseBoard_manufacturer", "baseBoard_product", "baseBoard_version",
"baseBoard_serial", "baseBoard_asset", "baseBoard_location",
"chassis_manufacturer", "chassis_version",
- "chassis_serial", "chassis_asset", "chassis_sku"]
+ "chassis_serial", "chassis_asset", "chassis_sku", "oemStrings"]
type = XMLProperty("./@type")
@@ -51,3 +56,5 @@ class DomainSysinfo(XMLBuilder):
chassis_serial = XMLProperty("./chassis/entry[@name='serial']")
chassis_asset = XMLProperty("./chassis/entry[@name='asset']")
chassis_sku = XMLProperty("./chassis/entry[@name='sku']")
+
+ oemStrings = XMLChildProperty(_SysinfoEntry, relative_xpath="./oemStrings")