libvirt: Parse basic attributes of LibvirtConfigGuest from xml

LibvirtConfigGuest.parse_dom does not parse basic attributes (like
uuid, name), which decreases area of its usage.

This patch adds parsing of such elements.

Change-Id: I09d64335ee052450af4584f053085dd33a8f8dc8
This commit is contained in:
Feodor Tersin 2016-12-25 01:11:32 +03:00
parent 961b5febf1
commit 531f3b7d71
2 changed files with 48 additions and 0 deletions

View File

@ -2389,6 +2389,38 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
self.assertFalse(obj.os_bootmenu)
self.assertIsNone(obj.os_smbios)
def test_ConfigGuest_parse_basic_props(self):
xmldoc = """
<domain>
<uuid>b38a3f43-4be2-4046-897f-b67c2f5e0147</uuid>
<name>demo</name>
<memory>104857600</memory>
<vcpu cpuset="0-1,3-5">2</vcpu>
</domain>
"""
obj = config.LibvirtConfigGuest()
obj.parse_str(xmldoc)
self.assertEqual('b38a3f43-4be2-4046-897f-b67c2f5e0147', obj.uuid)
self.assertEqual('demo', obj.name)
self.assertEqual(100 * units.Mi, obj.memory)
self.assertEqual(2, obj.vcpus)
self.assertEqual(set([0, 1, 3, 4, 5]), obj.cpuset)
xmldoc = """
<domain>
<vcpu>3</vcpu>
</domain>
"""
obj = config.LibvirtConfigGuest()
obj.parse_str(xmldoc)
self.assertIsNone(obj.uuid)
self.assertIsNone(obj.name)
self.assertEqual(500 * units.Mi, obj.memory) # default value
self.assertEqual(3, obj.vcpus)
self.assertIsNone(obj.cpuset)
class LibvirtConfigGuestSnapshotTest(LibvirtConfigBaseTest):

View File

@ -2186,6 +2186,20 @@ class LibvirtConfigGuest(LibvirtConfigObject):
return root
def _parse_basic_props(self, xmldoc):
# memmbacking, memtune, numatune, metadata are skipped just because
# corresponding config types do not implement parse_dom method
if xmldoc.tag == 'uuid':
self.uuid = xmldoc.text
elif xmldoc.tag == 'name':
self.name = xmldoc.text
elif xmldoc.tag == 'memory':
self.memory = int(xmldoc.text)
elif xmldoc.tag == 'vcpu':
self.vcpus = int(xmldoc.text)
if xmldoc.get('cpuset') is not None:
self.cpuset = hardware.parse_cpu_spec(xmldoc.get('cpuset'))
def _parse_os(self, xmldoc):
# smbios is skipped just because LibvirtConfigGuestSMBIOS
# does not implement parse_dom method
@ -2262,6 +2276,8 @@ class LibvirtConfigGuest(LibvirtConfigObject):
self.add_perf_event(p.get('name'))
elif c.tag == 'os':
self._parse_os(c)
else:
self._parse_basic_props(c)
def add_device(self, dev):
self.devices.append(dev)