[Kimchi-devel] [PATCH 1/3] Fix issue #339: Enable backend to handle not persistent pools

Rodrigo Trujillo rodrigo.trujillo at linux.vnet.ibm.com
Fri Mar 7 00:15:30 UTC 2014


This patch changes the error message when storage pool is not found and
adds the isPersistent checkings, in order to return correctly from
deactivate function.

Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
---
 src/kimchi/control/storagepools.py |  3 ++-
 src/kimchi/model/storagepools.py   | 11 +++++++++--
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/kimchi/control/storagepools.py b/src/kimchi/control/storagepools.py
index 62f9525..b75bca0 100644
--- a/src/kimchi/control/storagepools.py
+++ b/src/kimchi/control/storagepools.py
@@ -90,7 +90,8 @@ class StoragePool(Resource):
                'source': self.info['source'],
                'type': self.info['type'],
                'nr_volumes': self.info['nr_volumes'],
-               'autostart': self.info['autostart']}
+               'autostart': self.info['autostart'],
+               'persistent': self.info['persistent']}
 
         val = self.info.get('task_id')
         if val:
diff --git a/src/kimchi/model/storagepools.py b/src/kimchi/model/storagepools.py
index fe70fa1..fea19f6 100644
--- a/src/kimchi/model/storagepools.py
+++ b/src/kimchi/model/storagepools.py
@@ -175,7 +175,7 @@ class StoragePoolModel(object):
             return conn.storagePoolLookupByName(name.encode("utf-8"))
         except libvirt.libvirtError as e:
             if e.get_error_code() == libvirt.VIR_ERR_NO_STORAGE_POOL:
-                raise NotFoundError("KCHTMPL0002E", {'name': name})
+                raise NotFoundError("KCHPOOL0002E", {'name': name})
             else:
                 raise
 
@@ -229,6 +229,7 @@ class StoragePoolModel(object):
         pool = self.get_storagepool(name, self.conn)
         info = pool.info()
         autostart = True if pool.autostart() else False
+        persistent = True if pool.isPersistent() else False
         xml = pool.XMLDesc(0)
         path = xmlutils.xpath_get_text(xml, "/pool/target/path")[0]
         pool_type = xmlutils.xpath_get_text(xml, "/pool/@type")[0]
@@ -254,7 +255,8 @@ class StoragePoolModel(object):
                'capacity': info[1],
                'allocated': info[2],
                'available': info[3],
-               'nr_volumes': nr_volumes}
+               'nr_volumes': nr_volumes,
+               'persistent': persistent}
 
         if not pool.isPersistent():
             # Deal with deep scan generated pool
@@ -354,10 +356,15 @@ class StoragePoolModel(object):
                                   {'name': name, 'server': source['addr']})
             return
         try:
+            persistent = pool.isPersistent()
             pool.destroy()
         except libvirt.libvirtError as e:
             raise OperationFailed("KCHPOOL0010E",
                                   {'name': name, 'err': e.get_error_message()})
+        # If pool was not persistent, then it was erased by destroy() and
+        # must return nothing here, to trigger _redirect() and avoid errors
+        if not persistent:
+            return ""
 
     def delete(self, name):
         if self._pool_used_by_template(name):
-- 
1.8.5.3




More information about the Kimchi-devel mailing list