From 36339b8fac4faf8539e8fab1bc146cf3302e23b6 Mon Sep 17 00:00:00 2001 From: keisuke fukawa Date: Tue, 29 Jun 2010 15:36:58 +0900 Subject: [PATCH] Change validate Remove iscsi list in create storagepool when already used storagepool --- karesansui/gadget/hostby1storagepool.py | 41 +++++++++++++--------- karesansui/lib/virt/virt.py | 27 ++++++++++++++ .../hostby1storagepool/hostby1storagepool.input | 2 +- 3 files changed, 53 insertions(+), 17 deletions(-) diff --git a/karesansui/gadget/hostby1storagepool.py b/karesansui/gadget/hostby1storagepool.py index bb44049..3d07cd1 100644 --- a/karesansui/gadget/hostby1storagepool.py +++ b/karesansui/gadget/hostby1storagepool.py @@ -64,6 +64,20 @@ def validates_pool_dir(obj, now_pools): obj.input.pool_target_path, CHECK_EMPTY | CHECK_STARTROOT | CHECK_NOTROOT ) and check + + try: + kvc = KaresansuiVirtConnection() + + for pool_name in now_pools: + target_path = kvc.get_storage_pool_targetpath(pool_name) + if obj.input.pool_target_path == target_path: + check = False + # TRANSLATORS: + # ストレージプールのターゲットパス"%s"はすでに使われています。 + checker.add_error(_('Storagepool target path "%s" is already being used.') % (obj.input.pool_target_path)) + finally: + kvc.close() + else: check = False checker.add_error(_('"%s" is required.') %_('Directory Path')) @@ -263,15 +277,12 @@ class HostBy1StoragePool(Rest): # .input try: kvc = KaresansuiVirtConnection() - available_pools = [] - for pool in pools: - tmp_pool_obj = kvc.search_kvn_storage_pools(pool)[0] - tmp_pool_info = tmp_pool_obj.get_info() - if not tmp_pool_info['type'].lower() == "iscsi": - available_pools.append(pool) - available_pools.sort() - self.view.pools = available_pools + already_iqn = [] + for pool in pools: + pool_iqn = kvc.get_storage_pool_sourcedevicepath(pool) + if pool_iqn: + already_iqn.append(pool_iqn) finally: kvc.close() @@ -280,17 +291,15 @@ class HostBy1StoragePool(Rest): self.logger.debug("Get iSCSI command failed. Return to timeout") return web.internalerror('Internal Server Error. (Timeout)') - self.view.network_storages = network_storages + available_network_storages = [] + for i in range(len(network_storages)): + if network_storages[i]['iqn'] not in already_iqn: + available_network_storages.append(network_storages[i]) + + self.view.network_storages = available_network_storages self.view.pool_types = (STORAGE_POOL_TYPE["TYPE_DIR"], STORAGE_POOL_TYPE["TYPE_ISCSI"]) - self.view.volume_formats = (STORAGE_VOLUME_FORMAT["TYPE_QCOW2"], - STORAGE_VOLUME_FORMAT["TYPE_RAW"], - STORAGE_VOLUME_FORMAT["TYPE_QCOW"], - STORAGE_VOLUME_FORMAT["TYPE_COW"], - STORAGE_VOLUME_FORMAT["TYPE_VMDK"], - ) - return True @auth diff --git a/karesansui/lib/virt/virt.py b/karesansui/lib/virt/virt.py index 39802b7..383976c 100644 --- a/karesansui/lib/virt/virt.py +++ b/karesansui/lib/virt/virt.py @@ -2502,6 +2502,33 @@ class KaresansuiVirtConnection: return retval + def get_storage_pool_sourcedevicepath(self, pool_name): + """ + ストレージプールのソースデバイスパスを取得します。(iscsi) + @param pool_name: ストレージプール名 + @return: ソースデバイスパス + @rtype: string + + + Get the source device path of storage pool. + @param pool_name: name of storage pool + @return: source device path + @rtype: string + + """ + retval = None + + try: + pool_objs = self.search_kvn_storage_pools(pool_name) + if not pool_objs: + raise KaresansuiVirtException(_("Storage pool could not be found. pool=%s") % \ + pool_name) + retval = pool_objs[0].get_info()['source']['dev_path'] + except: + pass + + return retval + def get_storage_pool_name_byimage(self, path): """ ディスクイメージのパスからストレージプールの名前を取得する diff --git a/karesansui/templates/default/hostby1storagepool/hostby1storagepool.input b/karesansui/templates/default/hostby1storagepool/hostby1storagepool.input index 9f6ef79..fbe9321 100644 --- a/karesansui/templates/default/hostby1storagepool/hostby1storagepool.input +++ b/karesansui/templates/default/hostby1storagepool/hostby1storagepool.input @@ -11,7 +11,7 @@ function validates_storagepool(){ $("#pool_name"), CHECK_EMPTY | CHECK_LENGTH | CHECK_ONLYSPACE | CHECK_VALID, "${_('Storage Pool Name')}", - "[^A-Za-z0-9-]", + "[^A-Za-z0-9-_]", MACHINE_NAME_MIN_LENGTH, MACHINE_NAME_MAX_LENGTH ) && check; -- 2.11.0