
Reviewed-by: Royce Lv<lvroyce@linux.vnet.ibm.com> Good catch! On 2014年03月07日 08:15, Rodrigo Trujillo wrote:
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@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):