Add support for libvirt domain <sysinfo> XML config
Libvirt domains can have system metadata defined in a <sysinfo> XML element. For the x86 platform with KVM guests, this can then be used to populate the SMBIOS data tables <sysinfo> <bios> <entry name="vendor">Acme</entry> </bios> <system> <entry name="manufacturer">Acme</entry> <entry name="product">Wile Coyote</entry> <entry name="uuid">c7a5fdbd-edaf-9455-926a-d65c16db1809</entry> </system> </sysinfo> Change-Id: Ib4980ddc2f558921893a7e208e304ba59636e430 Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
parent
73a0d35ce9
commit
4a7a46fd8c
@ -303,6 +303,74 @@ class LibvirtConfigGuestCPUTest(LibvirtConfigBaseTest):
|
||||
""")
|
||||
|
||||
|
||||
class LibvirtConfigGuestSysinfoTest(LibvirtConfigBaseTest):
|
||||
|
||||
def test_config_simple(self):
|
||||
obj = config.LibvirtConfigGuestSysinfo()
|
||||
|
||||
xml = obj.to_xml()
|
||||
self.assertXmlEqual(xml, """
|
||||
<sysinfo type="smbios"/>
|
||||
""")
|
||||
|
||||
def test_config_bios(self):
|
||||
obj = config.LibvirtConfigGuestSysinfo()
|
||||
obj.bios_vendor = "Acme"
|
||||
obj.bios_version = "6.6.6"
|
||||
|
||||
xml = obj.to_xml()
|
||||
self.assertXmlEqual(xml, """
|
||||
<sysinfo type="smbios">
|
||||
<bios>
|
||||
<entry name="vendor">Acme</entry>
|
||||
<entry name="version">6.6.6</entry>
|
||||
</bios>
|
||||
</sysinfo>
|
||||
""")
|
||||
|
||||
def test_config_system(self):
|
||||
obj = config.LibvirtConfigGuestSysinfo()
|
||||
obj.system_manufacturer = "Acme"
|
||||
obj.system_product = "Wile Coyote"
|
||||
obj.system_version = "6.6.6"
|
||||
obj.system_serial = "123456"
|
||||
obj.system_uuid = "c7a5fdbd-edaf-9455-926a-d65c16db1809"
|
||||
|
||||
xml = obj.to_xml()
|
||||
self.assertXmlEqual(xml, """
|
||||
<sysinfo type="smbios">
|
||||
<system>
|
||||
<entry name="manufacturer">Acme</entry>
|
||||
<entry name="product">Wile Coyote</entry>
|
||||
<entry name="version">6.6.6</entry>
|
||||
<entry name="serial">123456</entry>
|
||||
<entry name="uuid">c7a5fdbd-edaf-9455-926a-d65c16db1809</entry>
|
||||
</system>
|
||||
</sysinfo>
|
||||
""")
|
||||
|
||||
def test_config_mixed(self):
|
||||
obj = config.LibvirtConfigGuestSysinfo()
|
||||
obj.bios_vendor = "Acme"
|
||||
obj.system_manufacturer = "Acme"
|
||||
obj.system_product = "Wile Coyote"
|
||||
obj.system_uuid = "c7a5fdbd-edaf-9455-926a-d65c16db1809"
|
||||
|
||||
xml = obj.to_xml()
|
||||
self.assertXmlEqual(xml, """
|
||||
<sysinfo type="smbios">
|
||||
<bios>
|
||||
<entry name="vendor">Acme</entry>
|
||||
</bios>
|
||||
<system>
|
||||
<entry name="manufacturer">Acme</entry>
|
||||
<entry name="product">Wile Coyote</entry>
|
||||
<entry name="uuid">c7a5fdbd-edaf-9455-926a-d65c16db1809</entry>
|
||||
</system>
|
||||
</sysinfo>
|
||||
""")
|
||||
|
||||
|
||||
class LibvirtConfigGuestDiskTest(LibvirtConfigBaseTest):
|
||||
|
||||
def test_config_file(self):
|
||||
@ -680,6 +748,10 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
|
||||
obj.acpi = True
|
||||
obj.apic = True
|
||||
|
||||
obj.sysinfo = config.LibvirtConfigGuestSysinfo()
|
||||
obj.sysinfo.bios_vendor = "Acme"
|
||||
obj.sysinfo.system_version = "1.0.0"
|
||||
|
||||
disk = config.LibvirtConfigGuestDisk()
|
||||
disk.source_type = "file"
|
||||
disk.source_path = "/tmp/img"
|
||||
@ -695,6 +767,14 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
|
||||
<name>demo</name>
|
||||
<memory>104857600</memory>
|
||||
<vcpu>2</vcpu>
|
||||
<sysinfo type='smbios'>
|
||||
<bios>
|
||||
<entry name="vendor">Acme</entry>
|
||||
</bios>
|
||||
<system>
|
||||
<entry name="version">1.0.0</entry>
|
||||
</system>
|
||||
</sysinfo>
|
||||
<os>
|
||||
<type>linux</type>
|
||||
<boot dev="hd"/>
|
||||
|
@ -337,6 +337,86 @@ class LibvirtConfigGuestCPU(LibvirtConfigCPU):
|
||||
return cpu
|
||||
|
||||
|
||||
class LibvirtConfigGuestSysinfo(LibvirtConfigObject):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
super(LibvirtConfigGuestSysinfo, self).__init__(root_name="sysinfo",
|
||||
**kwargs)
|
||||
|
||||
self.type = "smbios"
|
||||
self.bios_vendor = None
|
||||
self.bios_version = None
|
||||
self.system_manufacturer = None
|
||||
self.system_product = None
|
||||
self.system_version = None
|
||||
self.system_serial = None
|
||||
self.system_uuid = None
|
||||
|
||||
def format_dom(self):
|
||||
sysinfo = super(LibvirtConfigGuestSysinfo, self).format_dom()
|
||||
|
||||
sysinfo.set("type", self.type)
|
||||
|
||||
bios = None
|
||||
system = None
|
||||
|
||||
if self.bios_vendor is not None:
|
||||
if bios is None:
|
||||
bios = etree.Element("bios")
|
||||
info = etree.Element("entry", name="vendor")
|
||||
info.text = self.bios_vendor
|
||||
bios.append(info)
|
||||
|
||||
if self.bios_version is not None:
|
||||
if bios is None:
|
||||
bios = etree.Element("bios")
|
||||
info = etree.Element("entry", name="version")
|
||||
info.text = self.bios_version
|
||||
bios.append(info)
|
||||
|
||||
if self.system_manufacturer is not None:
|
||||
if system is None:
|
||||
system = etree.Element("system")
|
||||
info = etree.Element("entry", name="manufacturer")
|
||||
info.text = self.system_manufacturer
|
||||
system.append(info)
|
||||
|
||||
if self.system_product is not None:
|
||||
if system is None:
|
||||
system = etree.Element("system")
|
||||
info = etree.Element("entry", name="product")
|
||||
info.text = self.system_product
|
||||
system.append(info)
|
||||
|
||||
if self.system_version is not None:
|
||||
if system is None:
|
||||
system = etree.Element("system")
|
||||
info = etree.Element("entry", name="version")
|
||||
info.text = self.system_version
|
||||
system.append(info)
|
||||
|
||||
if self.system_serial is not None:
|
||||
if system is None:
|
||||
system = etree.Element("system")
|
||||
info = etree.Element("entry", name="serial")
|
||||
info.text = self.system_serial
|
||||
system.append(info)
|
||||
|
||||
if self.system_uuid is not None:
|
||||
if system is None:
|
||||
system = etree.Element("system")
|
||||
info = etree.Element("entry", name="uuid")
|
||||
info.text = self.system_uuid
|
||||
system.append(info)
|
||||
|
||||
if bios is not None:
|
||||
sysinfo.append(bios)
|
||||
if system is not None:
|
||||
sysinfo.append(system)
|
||||
|
||||
return sysinfo
|
||||
|
||||
|
||||
class LibvirtConfigGuestDevice(LibvirtConfigObject):
|
||||
|
||||
def __init__(self, **kwargs):
|
||||
@ -589,6 +669,7 @@ class LibvirtConfigGuest(LibvirtConfigObject):
|
||||
self.acpi = False
|
||||
self.apic = False
|
||||
self.clock = None
|
||||
self.sysinfo = None
|
||||
self.os_type = None
|
||||
self.os_loader = None
|
||||
self.os_kernel = None
|
||||
@ -647,6 +728,10 @@ class LibvirtConfigGuest(LibvirtConfigObject):
|
||||
root.set("type", self.virt_type)
|
||||
|
||||
self._format_basic_props(root)
|
||||
|
||||
if self.sysinfo is not None:
|
||||
root.append(self.sysinfo.format_dom())
|
||||
|
||||
self._format_os(root)
|
||||
self._format_features(root)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user