From 24c9ac07ef21c3c950b6555c722bd9692c056f9b Mon Sep 17 00:00:00 2001 From: Ricardo Marques Date: Tue, 19 Feb 2019 09:32:27 +0000 Subject: [PATCH] Adds support for pool/image names with dots According to https://github.com/ceph/ceph-iscsi/pull/29 Signed-off-by: Ricardo Marques --- src/pybind/mgr/dashboard/controllers/iscsi.py | 20 +++++++++++-------- .../mgr/dashboard/services/iscsi_client.py | 18 ++++++++--------- src/pybind/mgr/dashboard/tests/test_iscsi.py | 10 ++++++---- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/pybind/mgr/dashboard/controllers/iscsi.py b/src/pybind/mgr/dashboard/controllers/iscsi.py index f67037cab0b30..993b979110a0d 100644 --- a/src/pybind/mgr/dashboard/controllers/iscsi.py +++ b/src/pybind/mgr/dashboard/controllers/iscsi.py @@ -214,7 +214,8 @@ class IscsiTarget(RESTController): new_disks, image_id): IscsiClient.instance(gateway_name=gateway_name).delete_target_lun(target_iqn, image_id) - IscsiClient.instance(gateway_name=gateway_name).delete_disk(image_id) + pool, image = image_id.split('/', 1) + IscsiClient.instance(gateway_name=gateway_name).delete_disk(pool, image) TaskManager.current_task().inc_progress(task_progress_inc) if IscsiTarget._target_deletion_required(target, new_target_iqn, new_target_controls, new_portals): @@ -396,16 +397,19 @@ class IscsiTarget(RESTController): for disk in disks: pool = disk['pool'] image = disk['image'] - image_id = '{}.{}'.format(pool, image) + image_id = '{}/{}'.format(pool, image) if image_id not in config['disks']: backstore = disk['backstore'] - IscsiClient.instance(gateway_name=gateway_name).create_disk(image_id, backstore) + IscsiClient.instance(gateway_name=gateway_name).create_disk(pool, + image, + backstore) if not target_config or image_id not in target_config['disks']: IscsiClient.instance(gateway_name=gateway_name).create_target_lun(target_iqn, image_id) controls = disk['controls'] if controls: - IscsiClient.instance(gateway_name=gateway_name).reconfigure_disk(image_id, + IscsiClient.instance(gateway_name=gateway_name).reconfigure_disk(pool, + image, controls) TaskManager.current_task().inc_progress(task_progress_inc) for client in clients: @@ -416,7 +420,7 @@ class IscsiTarget(RESTController): for lun in client['luns']: pool = lun['pool'] image = lun['image'] - image_id = '{}.{}'.format(pool, image) + image_id = '{}/{}'.format(pool, image) IscsiClient.instance(gateway_name=gateway_name).create_client_lun( target_iqn, client_iqn, image_id) user = client['auth']['user'] @@ -433,7 +437,7 @@ class IscsiTarget(RESTController): members = group['members'] image_ids = [] for disk in group['disks']: - image_ids.append('{}.{}'.format(disk['pool'], disk['image'])) + image_ids.append('{}/{}'.format(disk['pool'], disk['image'])) if not target_config or group_id not in target_config['groups']: IscsiClient.instance(gateway_name=gateway_name).create_group( target_iqn, group_id, members, image_ids) @@ -480,7 +484,7 @@ class IscsiTarget(RESTController): for client_iqn, client_config in target_config['clients'].items(): luns = [] for client_lun in client_config['luns'].keys(): - pool, image = client_lun.split('.', 1) + pool, image = client_lun.split('/', 1) lun = { 'pool': pool, 'image': image @@ -510,7 +514,7 @@ class IscsiTarget(RESTController): for group_id, group_config in target_config['groups'].items(): group_disks = [] for group_disk_key, _ in group_config['disks'].items(): - pool, image = group_disk_key.split('.', 1) + pool, image = group_disk_key.split('/', 1) group_disk = { 'pool': pool, 'image': image diff --git a/src/pybind/mgr/dashboard/services/iscsi_client.py b/src/pybind/mgr/dashboard/services/iscsi_client.py index cbbc14af3bd6d..906d0e2412249 100644 --- a/src/pybind/mgr/dashboard/services/iscsi_client.py +++ b/src/pybind/mgr/dashboard/services/iscsi_client.py @@ -90,24 +90,24 @@ class IscsiClient(RestClient): 'skipchecks': 'true' }) - @RestClient.api_put('/api/disk/{image_id}') - def create_disk(self, image_id, backstore, request=None): - logger.debug("iSCSI: Creating disk: %s", image_id) + @RestClient.api_put('/api/disk/{pool}/{image}') + def create_disk(self, pool, image, backstore, request=None): + logger.debug("iSCSI: Creating disk: %s/%s", pool, image) return request({ 'mode': 'create', 'backstore': backstore }) - @RestClient.api_delete('/api/disk/{image_id}') - def delete_disk(self, image_id, request=None): - logger.debug("iSCSI: Deleting disk: %s", image_id) + @RestClient.api_delete('/api/disk/{pool}/{image}') + def delete_disk(self, pool, image, request=None): + logger.debug("iSCSI: Deleting disk: %s/%s", pool, image) return request({ 'preserve_image': 'true' }) - @RestClient.api_put('/api/disk/{image_id}') - def reconfigure_disk(self, image_id, controls, request=None): - logger.debug("iSCSI: Reconfiguring disk: %s", image_id) + @RestClient.api_put('/api/disk/{pool}/{image}') + def reconfigure_disk(self, pool, image, controls, request=None): + logger.debug("iSCSI: Reconfiguring disk: %s/%s", pool, image) return request({ 'controls': json.dumps(controls), 'mode': 'reconfigure' diff --git a/src/pybind/mgr/dashboard/tests/test_iscsi.py b/src/pybind/mgr/dashboard/tests/test_iscsi.py index dd37547e2aa55..3c70589abcc66 100644 --- a/src/pybind/mgr/dashboard/tests/test_iscsi.py +++ b/src/pybind/mgr/dashboard/tests/test_iscsi.py @@ -480,8 +480,8 @@ class IscsiClientMock(object): "portal_ip_address": ip_address[0] } - def create_disk(self, image_id, backstore): - pool, image = image_id.split('.') + def create_disk(self, pool, image, backstore): + image_id = '{}/{}'.format(pool, image) self.config['disks'][image_id] = { "pool": pool, "image": image, @@ -494,7 +494,8 @@ class IscsiClientMock(object): target_config['disks'].append(image_id) self.config['disks'][image_id]['owner'] = list(target_config['portals'].keys())[0] - def reconfigure_disk(self, image_id, controls): + def reconfigure_disk(self, pool, image, controls): + image_id = '{}/{}'.format(pool, image) self.config['disks'][image_id]['controls'] = controls def create_client(self, target_iqn, client_iqn): @@ -540,7 +541,8 @@ class IscsiClientMock(object): target_config['disks'].remove(image_id) del self.config['disks'][image_id]['owner'] - def delete_disk(self, image_id): + def delete_disk(self, pool, image): + image_id = '{}/{}'.format(pool, image) del self.config['disks'][image_id] def delete_target(self, target_iqn): -- 2.39.5