aboutsummaryrefslogtreecommitdiffstats
path: root/patches/opnfv-fuel/0007-virtual_fuel-add-XML-tree-as-attribute-of-VirtualFue.patch
blob: 53e1a8db3bcccca56ffb7422e01457be434e55ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
From: Josep Puigdemont <josep.puigdemont@enea.com>
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 <josep.puigdemont@enea.com>
---
 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' %