[PATCH] [Kimchi 0/3] Issue #924: Avoid deleting storage pool in

This patchset disable buttons to remove and deactivate storagepools that are currently in use by any template. Jose Ricardo Ziviani (3): Issue #924: Add field to inform front-end if storage is in use Issue #924: Disable deactivate/delete buttons if storage is in use Issue #924: Update test case with new storage pool field control/storagepools.py | 3 ++- model/storagepools.py | 3 ++- tests/test_model_storagepool.py | 2 +- ui/js/src/kimchi.storage_main.js | 13 +++++++++---- ui/pages/tabs/storage.html.tmpl | 6 +++--- 5 files changed, 17 insertions(+), 10 deletions(-) -- 1.9.1

Signed-off-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com> --- control/storagepools.py | 3 ++- model/storagepools.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/control/storagepools.py b/control/storagepools.py index aa7dbd3..714f4bb 100644 --- a/control/storagepools.py +++ b/control/storagepools.py @@ -113,7 +113,8 @@ class StoragePool(Resource): 'type': self.info['type'], 'nr_volumes': self.info['nr_volumes'], 'autostart': self.info['autostart'], - 'persistent': self.info['persistent']} + 'persistent': self.info['persistent'], + 'in_use': self.info['in_use']} val = self.info.get('task_id') if val: diff --git a/model/storagepools.py b/model/storagepools.py index 4a0d34c..be06988 100644 --- a/model/storagepools.py +++ b/model/storagepools.py @@ -357,7 +357,8 @@ class StoragePoolModel(object): 'allocated': info[2], 'available': info[3], 'nr_volumes': nr_volumes, - 'persistent': persistent} + 'persistent': persistent, + 'in_use': self._pool_used_by_template(name)} if not pool.isPersistent(): # Deal with deep scan generated pool -- 1.9.1

Signed-off-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com> --- ui/js/src/kimchi.storage_main.js | 13 +++++++++---- ui/pages/tabs/storage.html.tmpl | 6 +++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/ui/js/src/kimchi.storage_main.js b/ui/js/src/kimchi.storage_main.js index 9eaaa51..5312388 100644 --- a/ui/js/src/kimchi.storage_main.js +++ b/ui/js/src/kimchi.storage_main.js @@ -180,11 +180,19 @@ kimchi.storageBindClick = function() { event.preventDefault(); var storage_action = $(this); var deleteButton = storage_action.find('.pool-delete'); - if ('active' === deleteButton.data('stat')) { + var deactivateButton = storage_action.find('.pool-deactivate'); + var in_use = deleteButton.data('inuse'); + if ('active' === deleteButton.data('stat') || in_use) { deleteButton.parent().addClass('disabled'); } else { deleteButton.parent().removeClass('disabled'); } + + if (in_use) { + deactivateButton.parent().addClass('disabled'); + } else { + deactivateButton.parent().removeClass('disabled'); + } }); $('.pool-extend').on('click', function(event) { @@ -194,9 +202,6 @@ kimchi.storageBindClick = function() { partitions = $(this).data('name'); //$("#logicalPoolExtend").dialog("option", "poolName", $(this).data('name')); }); - - - } $('.wok-datagrid-row .handle ').on('click', function(event) { diff --git a/ui/pages/tabs/storage.html.tmpl b/ui/pages/tabs/storage.html.tmpl index 5ffdc97..fa51e48 100644 --- a/ui/pages/tabs/storage.html.tmpl +++ b/ui/pages/tabs/storage.html.tmpl @@ -123,7 +123,7 @@ <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-expanded="false" aria-haspopup="true"><span class="edit-alt"></span>$_("Actions")<span class="caret"></span></button> <ul class="dropdown-menu actionsheet"> <li role="presentation"> - <a href="#" class="pool-deactivate" data-stat="{state}" data-name="{name}" data-persistent="{persistent}" href="#"><i class="fa fa-minus-circle"></i>$_("Deactivate")</a> + <a href="#" class="pool-deactivate" data-inuse="{in_use}" data-stat="{state}" data-name="{name}" data-persistent="{persistent}" href="#"><i class="fa fa-minus-circle"></i>$_("Deactivate")</a> </li> <li role="presentation"> <a href="#" class="pool-activate" data-stat="{state}" data-name="{name}"><i class="fa fa-power-off"></i>$_("Activate")</a> @@ -135,7 +135,7 @@ <a href="#" class="pool-extend" data-stat="{state}" data-name="{name}" data-toggle="modal" data-target="#logicalPoolExtend"><i class="fa fa-external-link-square"></i>$_("Extend")</a> </li> <li role="presentation" class="critical"> - <a href="#" class="pool-delete" data-stat="{state}" data-name="{name}"><i class="fa fa-ban"></i>$_("Undefine")</a> + <a href="#" class="pool-delete" data-inuse="{in_use}" data-stat="{state}" data-name="{name}"><i class="fa fa-ban"></i>$_("Undefine")</a> </li> </ul> </div> @@ -203,4 +203,4 @@ </script> <div id="modalWindow" class="modal fade storage-modal" tabindex="-1" role="dialog" aria-labelledby="storageModalLabel" aria-hidden="true"> </div> </body> -</html> \ No newline at end of file +</html> -- 1.9.1

Signed-off-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com> --- mockmodel.py | 4 ++++ tests/test_model_storagepool.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/mockmodel.py b/mockmodel.py index c3c6930..142e81f 100644 --- a/mockmodel.py +++ b/mockmodel.py @@ -125,6 +125,7 @@ class MockModel(Model): DevicesModel.get_list = self._mock_devices_get_list StoragePoolsModel._check_lvm = self._check_lvm StoragePoolModel._update_lvm_disks = self._update_lvm_disks + StoragePoolModel._pool_used_by_template = self._pool_used_by_template StorageVolumesModel.get_list = self._mock_storagevolumes_get_list StorageVolumeModel.doUpload = self._mock_storagevolume_doUpload LibvirtVMTemplate._get_volume_path = self._get_volume_path @@ -260,6 +261,9 @@ class MockModel(Model): # do not do any verification while using MockModel pass + def _pool_used_by_template(self, pool_name): + return False + def _update_lvm_disks(self, pool_name, disks): conn = self.conn.get() pool = conn.storagePoolLookupByName(pool_name.encode('utf-8')) diff --git a/tests/test_model_storagepool.py b/tests/test_model_storagepool.py index 4ff5aa1..276b8a5 100644 --- a/tests/test_model_storagepool.py +++ b/tests/test_model_storagepool.py @@ -95,7 +95,7 @@ class StoragepoolTests(unittest.TestCase): p = json.loads(resp.read()) keys = [u'name', u'state', u'capacity', u'allocated', u'available', u'path', u'source', u'type', - u'nr_volumes', u'autostart', u'persistent'] + u'nr_volumes', u'autostart', u'persistent', 'in_use'] self.assertEquals(sorted(keys), sorted(p.keys())) self.assertEquals(name, p['name']) self.assertEquals('inactive', p['state']) -- 1.9.1

Reviewed-by: Paulo Ricardo Paz Vital <pvital@linux.vnet.ibm.com> On Apr 15 07:43PM, Jose Ricardo Ziviani wrote:
This patchset disable buttons to remove and deactivate storagepools that are currently in use by any template.
Jose Ricardo Ziviani (3): Issue #924: Add field to inform front-end if storage is in use Issue #924: Disable deactivate/delete buttons if storage is in use Issue #924: Update test case with new storage pool field
control/storagepools.py | 3 ++- model/storagepools.py | 3 ++- tests/test_model_storagepool.py | 2 +- ui/js/src/kimchi.storage_main.js | 13 +++++++++---- ui/pages/tabs/storage.html.tmpl | 6 +++--- 5 files changed, 17 insertions(+), 10 deletions(-)
-- 1.9.1
_______________________________________________ Kimchi-devel mailing list Kimchi-devel@ovirt.org http://lists.ovirt.org/mailman/listinfo/kimchi-devel
-- Paulo Ricardo Paz Vital Linux Technology Center, IBM Systems http://www.ibm.com/linux/ltc/
participants (3)
-
Aline Manera
-
Jose Ricardo Ziviani
-
Paulo Ricardo Paz Vital