From: Josep Puigdemont Date: Fri, 20 May 2016 10:05:11 +0200 Subject: [PATCH] virtual_fuel: add XML tree as attribute of VirtualFuel Now the VM XML definition tree is an attribute of the object, this way it can be used by all methods without having to re-read the file. Methods added: update_vm_template_file: Flushes the contents of the in-memory XML representation of the VM to the backing file. Signed-off-by: Josep Puigdemont --- deploy/environments/virtual_fuel.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/deploy/environments/virtual_fuel.py b/deploy/environments/virtual_fuel.py index f9f9f7a..7dc9720 100644 --- a/deploy/environments/virtual_fuel.py +++ b/deploy/environments/virtual_fuel.py @@ -54,14 +54,21 @@ class VirtualFuel(ExecutionEnvironment): self.dha.get_node_property( self.fuel_node_id, 'libvirtTemplate')) check_file_exists(self.vm_template) + with open(self.vm_template) as f: + self.vm_xml = etree.parse(f) + + self.temp_vm_file = '%s/%s' % (self.temp_dir, self.vm_name) + self.update_vm_template_file() def __del__(self): delete(self.temp_dir) - def set_vm_nic(self, temp_vm_file): - with open(temp_vm_file) as f: - vm_xml = etree.parse(f) - interfaces = vm_xml.xpath('/domain/devices/interface') + def update_vm_template_file(self): + with open(self.temp_vm_file, "wc") as f: + self.vm_xml.write(f, pretty_print=True, xml_declaration=True) + + def set_vm_nic(self): + interfaces = self.vm_xml.xpath('/domain/devices/interface') for interface in interfaces: interface.getparent().remove(interface) interface = etree.Element('interface') @@ -70,12 +77,12 @@ class VirtualFuel(ExecutionEnvironment): source.set('bridge', self.pxe_bridge) model = etree.SubElement(interface, 'model') model.set('type', 'virtio') - devices = vm_xml.xpath('/domain/devices') + devices = self.vm_xml.xpath('/domain/devices') if devices: device = devices[0] device.append(interface) - with open(temp_vm_file, 'w') as f: - vm_xml.write(f, pretty_print=True, xml_declaration=True) + + self.update_vm_template_file() def create_volume(self, pool, name, su, img_type='qcow2'): log('Creating image using Libvirt volumes in pool %s, name: %s' %