[Kimchi-devel] [PATCH 4/4] Transient StoragePool POST request handling

Christy Perez christy at linux.vnet.ibm.com
Mon Jan 19 21:49:17 UTC 2015


Ignore the exception on GET for Stop (deactivate) of
transient Storage Pools.
---
 src/kimchi/control/storagepools.py | 11 +++++++++--
 src/kimchi/model/storagepools.py   |  8 ++++++--
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/kimchi/control/storagepools.py b/src/kimchi/control/storagepools.py
index 872ad04..e55a85f 100644
--- a/src/kimchi/control/storagepools.py
+++ b/src/kimchi/control/storagepools.py
@@ -19,7 +19,6 @@
 
 import cherrypy
 
-
 from kimchi.control.base import Collection, Resource
 from kimchi.control.storagevolumes import IsoVolumes, StorageVolumes
 from kimchi.control.utils import get_class_name, model_fn
@@ -75,11 +74,19 @@ def _get_resources(self, filter_params):
 class StoragePool(Resource):
     def __init__(self, model, ident):
         super(StoragePool, self).__init__(model, ident)
+        _ignore_not_found = False
+        try:
+            # the test driver causes an exception in is_persistent()
+            _ignore_not_found = \
+                not model.storagepool_is_persistent(self.ident.decode('utf-8'))
+        except Exception:
+            pass
         self.role_key = 'storage'
         self.admin_methods = ['PUT', 'POST', 'DELETE']
         self.uri_fmt = "/storagepools/%s"
         self.activate = self.generate_action_handler('activate')
-        self.deactivate = self.generate_action_handler('deactivate')
+        self.deactivate = self.generate_action_handler('deactivate', \
+            ignore_not_found = _ignore_not_found)
         self.storagevolumes = StorageVolumes(self.model, ident)
 
     @property
diff --git a/src/kimchi/model/storagepools.py b/src/kimchi/model/storagepools.py
index e03c6bb..f7448d1 100644
--- a/src/kimchi/model/storagepools.py
+++ b/src/kimchi/model/storagepools.py
@@ -252,7 +252,7 @@ def lookup(self, name):
         pool = self.get_storagepool(name, self.conn)
         info = pool.info()
         autostart = True if pool.autostart() else False
-        persistent = True if pool.isPersistent() else False
+        persistent = self.is_persistent(name)
         xml = pool.XMLDesc(0)
         path = xpath_get_text(xml, "/pool/target/path")[0]
         pool_type = xpath_get_text(xml, "/pool/@type")[0]
@@ -281,7 +281,7 @@ def lookup(self, name):
                'nr_volumes': nr_volumes,
                'persistent': persistent}
 
-        if not pool.isPersistent():
+        if not persistent:
             # Deal with deep scan generated pool
             try:
                 with self.objstore as session:
@@ -293,6 +293,10 @@ def lookup(self, name):
                 pass
         return res
 
+    def is_persistent(self, name):
+        pool = self.get_storagepool(name, self.conn)
+        return True if pool.isPersistent() else False
+
     def _update_lvm_disks(self, pool_name, disks):
         # check if all the disks/partitions exists in the host
         for disk in disks:
-- 
1.9.3




More information about the Kimchi-devel mailing list