[Kimchi-devel] [PATCH V3 3/4] Implement integrity verification: verify template integrity in backend

shaohef at linux.vnet.ibm.com shaohef at linux.vnet.ibm.com
Fri Feb 21 06:59:27 UTC 2014


From: ShaoHe Feng <shaohef at linux.vnet.ibm.com>

update controller, mockmodel and model

Signed-off-by: ShaoHe Feng <shaohef at linux.vnet.ibm.com>
---
 src/kimchi/control/templates.py |  1 +
 src/kimchi/mockmodel.py         |  5 ++++-
 src/kimchi/model/templates.py   |  7 ++++++-
 src/kimchi/vmtemplate.py        | 32 ++++++++++++++++++++++++++++++++
 4 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/src/kimchi/control/templates.py b/src/kimchi/control/templates.py
index 8135e32..3f1dc7a 100644
--- a/src/kimchi/control/templates.py
+++ b/src/kimchi/control/templates.py
@@ -46,6 +46,7 @@ class Template(Resource):
     def data(self):
         return {'name': self.ident,
                 'icon': self.info['icon'],
+                'invalid': self.info['invalid'],
                 'os_distro': self.info['os_distro'],
                 'os_version': self.info['os_version'],
                 'cpus': self.info['cpus'],
diff --git a/src/kimchi/mockmodel.py b/src/kimchi/mockmodel.py
index 8ef4431..04cdb11 100644
--- a/src/kimchi/mockmodel.py
+++ b/src/kimchi/mockmodel.py
@@ -208,7 +208,7 @@ class MockModel(object):
 
     def template_lookup(self, name):
         t = self._get_template(name)
-        return t.info
+        return t.validate_integrity()
 
     def template_delete(self, name):
         try:
@@ -851,6 +851,9 @@ class MockVMTemplate(VMTemplate):
         VMTemplate.__init__(self, args)
         self.model = mockmodel_inst
 
+    def _get_all_networks_name(self):
+        return self.model.networks_get_list()
+
     def _storage_validate(self):
         pool_uri = self.info['storagepool']
         pool_name = pool_name_from_uri(pool_uri)
diff --git a/src/kimchi/model/templates.py b/src/kimchi/model/templates.py
index 5d09813..eac1a2a 100644
--- a/src/kimchi/model/templates.py
+++ b/src/kimchi/model/templates.py
@@ -21,6 +21,7 @@
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
 
 import copy
+import os
 
 import libvirt
 
@@ -83,7 +84,7 @@ class TemplateModel(object):
 
     def lookup(self, name):
         t = self.get_template(name, self.objstore, self.conn)
-        return t.info
+        return t.validate_integrity()
 
     def clone(self, name):
         # set default name
@@ -158,6 +159,10 @@ class LibvirtVMTemplate(VMTemplate):
 
         return pool
 
+    def _get_all_networks_name(self):
+        conn = self.conn.get()
+        return sorted(conn.listNetworks() + conn.listDefinedNetworks())
+
     def _network_validate(self):
         names = self.info['networks']
         for name in names:
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index a11ddd0..af07ee3 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -344,3 +344,35 @@ class VMTemplate(object):
 
     def _get_storage_type(self):
         return ''
+
+    def _get_all_networks_name(self):
+        return []
+
+    def validate_integrity(self):
+        invalid = {}
+        # validate networks integrity
+        invalid_networks = list(set(self.info['networks']) -
+                                set(self._get_all_networks_name()))
+        if invalid_networks:
+            invalid['networks'] = invalid_networks
+
+        # validate iso integrity
+        # FIXME when we support multiples cdrom devices
+        iso = self.info['cdrom']
+        try:
+            self.get_iso_info(iso)
+        except Exception:
+            invalid['cdrom'] = [iso]
+
+        # validate disks integrity
+        volumes = []
+        for disk in self.info['disks']:
+            volume = disk.get("volume")
+            if volume is not None and not os.path.exists(volume):
+                volumes.append(volume)
+        if volumes:
+            invalid['disks'] = volumes
+
+        self.info['invalid'] = invalid
+
+        return self.info
-- 
1.8.4.2




More information about the Kimchi-devel mailing list