diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-12-13 00:11:33 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-12-13 00:11:33 +0000 |
| commit | 3af7ae807933ed36f3b5d2b8e6bfa30daa8b11b9 (patch) | |
| tree | 342b217f984c128e2e493450cb634415ae6cd0d3 | |
| parent | df143208b0c3124f7635644ed90a1383424fabcf (diff) | |
| parent | 4a7a46fd8cb053c63455f07e83074578ad1ecb8f (diff) | |
| download | nova-3af7ae807933ed36f3b5d2b8e6bfa30daa8b11b9.tar.gz nova-3af7ae807933ed36f3b5d2b8e6bfa30daa8b11b9.tar.xz nova-3af7ae807933ed36f3b5d2b8e6bfa30daa8b11b9.zip | |
Merge "Add support for libvirt domain <sysinfo> XML config"
| -rw-r--r-- | nova/tests/test_libvirt_config.py | 80 | ||||
| -rw-r--r-- | nova/virt/libvirt/config.py | 85 |
2 files changed, 165 insertions, 0 deletions
diff --git a/nova/tests/test_libvirt_config.py b/nova/tests/test_libvirt_config.py index 8b0340fe8..f771d23f8 100644 --- a/nova/tests/test_libvirt_config.py +++ b/nova/tests/test_libvirt_config.py @@ -301,6 +301,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): @@ -678,6 +746,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" @@ -693,6 +765,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"/> diff --git a/nova/virt/libvirt/config.py b/nova/virt/libvirt/config.py index 69864645c..dcf5aeb40 100644 --- a/nova/virt/libvirt/config.py +++ b/nova/virt/libvirt/config.py @@ -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) |
