summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2012-12-13 00:11:33 +0000
committerGerrit Code Review <review@openstack.org>2012-12-13 00:11:33 +0000
commit3af7ae807933ed36f3b5d2b8e6bfa30daa8b11b9 (patch)
tree342b217f984c128e2e493450cb634415ae6cd0d3
parentdf143208b0c3124f7635644ed90a1383424fabcf (diff)
parent4a7a46fd8cb053c63455f07e83074578ad1ecb8f (diff)
downloadnova-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.py80
-rw-r--r--nova/virt/libvirt/config.py85
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)