From aa08fbb43330dc84156e142d8c3ea87b083052ee Mon Sep 17 00:00:00 2001 From: Dennis Dmitriev Date: Sat, 30 Jan 2016 22:07:00 +0200 Subject: [PATCH] Fix xml setter in Snapshot class Check for and 'mode' while modifying snapshot xml Change-Id: I600066caf3c11be48bc74b91f498b5a2176305f6 Closes-Bug:#1539985 --- devops/driver/libvirt/libvirt_driver.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/devops/driver/libvirt/libvirt_driver.py b/devops/driver/libvirt/libvirt_driver.py index d42100cd..a3dd48bd 100644 --- a/devops/driver/libvirt/libvirt_driver.py +++ b/devops/driver/libvirt/libvirt_driver.py @@ -45,17 +45,19 @@ class Snapshot(object): @_xml.setter def _xml(self, xml_content): snapshot_xmltree = ET.fromstring(xml_content) - cpu_mode = snapshot_xmltree.findall('./domain/cpu')[0].get('mode') - # Get cpu model from domain definition as it is not available - # in snapshot XML for host-passthrough cpu mode - if cpu_mode == 'host-passthrough': - domain_xml = self._domain.XMLDesc( - libvirt.VIR_DOMAIN_XML_UPDATE_CPU) - domain_xmltree = ET.fromstring(domain_xml) - cpu_element = domain_xmltree.find('./cpu') - domain_element = snapshot_xmltree.findall('./domain')[0] - domain_element.remove(domain_element.findall('./cpu')[0]) - domain_element.append(cpu_element) + cpu = snapshot_xmltree.findall('./domain/cpu') + if cpu and 'mode' in cpu[0].attrib: + cpu_mode = cpu[0].get('mode') + # Get cpu model from domain definition as it is not available + # in snapshot XML for host-passthrough cpu mode + if cpu_mode == 'host-passthrough': + domain_xml = self._domain.XMLDesc( + libvirt.VIR_DOMAIN_XML_UPDATE_CPU) + domain_xmltree = ET.fromstring(domain_xml) + cpu_element = domain_xmltree.find('./cpu') + domain_element = snapshot_xmltree.findall('./domain')[0] + domain_element.remove(domain_element.findall('./cpu')[0]) + domain_element.append(cpu_element) self._xml_content = ET.tostring(snapshot_xmltree) @property