From efc30389d63d5779ca0b63b0b3532b56869637c6 Mon Sep 17 00:00:00 2001 From: Luciano Lo Giudice Date: Thu, 9 Dec 2021 19:08:11 -0300 Subject: [PATCH 1/4] Implement test for disk replacement This PR builds on the add-disk one, testing the complete flow of adding a disk, removing it and finally re-adding it after recycling the original OSD id. --- zaza/openstack/charm_tests/ceph/tests.py | 46 ++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/zaza/openstack/charm_tests/ceph/tests.py b/zaza/openstack/charm_tests/ceph/tests.py index b6496bb..29933d3 100644 --- a/zaza/openstack/charm_tests/ceph/tests.py +++ b/zaza/openstack/charm_tests/ceph/tests.py @@ -546,20 +546,60 @@ class CephTest(test_utils.OpenStackBaseTest): ) logging.debug('OK') + def _get_local_osd_id(self, unit): + ret = zaza_model.run_on_unit(unit, + 'ceph-volume lvm list --format=json') + osds = json.loads(ret['Stdout']) + local = list(json.loads(ret['Stdout']))[-1] + return local if local.startswith('osd.') else 'osd.' + local + def test_cache_device(self): - """Test adding a new disk with a caching device.""" + """Test replacing a disk in use.""" logging.info('Running add-disk action with a caching device') osds = [x.entity_id for x in zaza_model.get_units('ceph-osd')] + params = [] for unit in osds: zaza_juju.add_storage(unit, 'cache-devices', 'cinder', 10) - loop_dev = zaza_juju.add_loop_device(unit, 10) + loop_dev = zaza_juju.add_loop_device(unit, 10).get('Stdout') + params.append({'unit': unit}) action_obj = zaza_model.run_action( unit_name=unit, action_name='add-disk', - action_params={'osd-devices': loop_dev.get('Stdout'), + action_params={'osd-devices': loop_dev, 'partition-size': 5} ) zaza_utils.assertActionRanOK(action_obj) + zaza_model.wait_for_application_states() + + logging.info('Removing previously added disks') + for param in params: + osd_id = self._get_local_osd_id(param['unit']) + param.update({'osd-id': osd_id}) + action_obj = zaza_model.run_action( + unit_name=param['unit'], + action_name='remove-disk', + action_params={'osd-ids': osd_id, 'timeout': 5, + 'format': 'json', 'purge': True} + ) + zaza_utils.assertActionRanOK(action_obj) + results = json.loads(action_obj.data['results']['message']) + results = results[next(iter(results))] + self.assertEqual(results['osd-ids'], osd_id) + zaza_model.wait_for_application_states() + + logging.info('Recycling previously removed OSDs') + for param in params: + device = zaza_juju.add_loop_device( + param['unit'], 10, 'l2').get('Stdout') + action_obj = zaza_model.run_action( + unit_name=param['unit'], + action_name='add-disk', + action_params={'osd-devices': device, + 'osd-ids': param['osd-id'], + 'partition-size': 5} + ) + zaza_utils.assertActionRanOK(action_obj) + zaza_model.wait_for_application_states() class CephRGWTest(test_utils.OpenStackBaseTest): From 4ecea0ee06ee5d4ce49be43307168b0ea3951395 Mon Sep 17 00:00:00 2001 From: Luciano Lo Giudice Date: Thu, 9 Dec 2021 19:10:43 -0300 Subject: [PATCH 2/4] Remove unused variable --- zaza/openstack/charm_tests/ceph/tests.py | 1 - 1 file changed, 1 deletion(-) diff --git a/zaza/openstack/charm_tests/ceph/tests.py b/zaza/openstack/charm_tests/ceph/tests.py index 29933d3..6ee2113 100644 --- a/zaza/openstack/charm_tests/ceph/tests.py +++ b/zaza/openstack/charm_tests/ceph/tests.py @@ -549,7 +549,6 @@ class CephTest(test_utils.OpenStackBaseTest): def _get_local_osd_id(self, unit): ret = zaza_model.run_on_unit(unit, 'ceph-volume lvm list --format=json') - osds = json.loads(ret['Stdout']) local = list(json.loads(ret['Stdout']))[-1] return local if local.startswith('osd.') else 'osd.' + local From e1d10f935917d9277958e5c569372ac821da035d Mon Sep 17 00:00:00 2001 From: Luciano Lo Giudice Date: Mon, 21 Mar 2022 18:44:42 -0300 Subject: [PATCH 3/4] Use the correct module --- zaza/openstack/charm_tests/ceph/tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zaza/openstack/charm_tests/ceph/tests.py b/zaza/openstack/charm_tests/ceph/tests.py index 543fc22..df221c6 100644 --- a/zaza/openstack/charm_tests/ceph/tests.py +++ b/zaza/openstack/charm_tests/ceph/tests.py @@ -595,8 +595,8 @@ class CephTest(test_utils.OpenStackBaseTest): logging.info('Recycling previously removed OSDs') for param in params: - device = zaza_juju.add_loop_device( - param['unit'], 10, 'l2').get('Stdout') + device = zaza_utils.add_loop_device( + param['unit'], 10, 'l2') action_obj = zaza_model.run_action( unit_name=param['unit'], action_name='add-disk', From 3a7afecf4d174af75e55522ca19c59db3cfb0588 Mon Sep 17 00:00:00 2001 From: Luciano Lo Giudice Date: Mon, 21 Mar 2022 19:51:59 -0300 Subject: [PATCH 4/4] Remove spurious loop device --- zaza/openstack/charm_tests/ceph/tests.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/zaza/openstack/charm_tests/ceph/tests.py b/zaza/openstack/charm_tests/ceph/tests.py index df221c6..379c330 100644 --- a/zaza/openstack/charm_tests/ceph/tests.py +++ b/zaza/openstack/charm_tests/ceph/tests.py @@ -566,8 +566,8 @@ class CephTest(test_utils.OpenStackBaseTest): params = [] for unit in osds: zaza_model.add_storage(unit, 'cache-devices', 'cinder', 10) - loop_dev = zaza_utils.add_loop_device(unit, 10) - params.append({'unit': unit}) + loop_dev = zaza_utils.add_loop_device(unit, 10).get('Stdout') + params.append({'unit': unit, 'device': loop_dev}) action_obj = zaza_model.run_action( unit_name=unit, action_name='add-disk', @@ -595,14 +595,12 @@ class CephTest(test_utils.OpenStackBaseTest): logging.info('Recycling previously removed OSDs') for param in params: - device = zaza_utils.add_loop_device( - param['unit'], 10, 'l2') action_obj = zaza_model.run_action( unit_name=param['unit'], action_name='add-disk', - action_params={'osd-devices': device, + action_params={'osd-devices': param['device'], 'osd-ids': param['osd-id'], - 'partition-size': 5} + 'partition-size': 4} ) zaza_utils.assertActionRanOK(action_obj) zaza_model.wait_for_application_states()