diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e2d42348..17f36547 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -24,6 +24,11 @@ Added * Added neutron trunk scenarios +Changed +~~~~~~~ + +* Extend CinderVolumes.list_volumes scenario arguments. + [1.3.0] - 2018-10-08 -------------------- diff --git a/rally_openstack/scenarios/cinder/volumes.py b/rally_openstack/scenarios/cinder/volumes.py old mode 100644 new mode 100755 index bf9a1fd9..58311306 --- a/rally_openstack/scenarios/cinder/volumes.py +++ b/rally_openstack/scenarios/cinder/volumes.py @@ -105,7 +105,8 @@ class CreateAndGetVolume(cinder_utils.CinderBasic): platform="openstack") class ListVolumes(cinder_utils.CinderBasic): - def run(self, detailed=True): + def run(self, detailed=True, search_opts=None, marker=None, + limit=None, sort_key=None, sort_dir=None, sort=None): """List all volumes. This simple scenario tests the cinder list command by listing @@ -113,9 +114,22 @@ class ListVolumes(cinder_utils.CinderBasic): :param detailed: True if detailed information about volumes should be listed + :param search_opts: Search options to filter out volumes. + :param marker: Begin returning volumes that appear later in the volume + list than that represented by this volume id.(For V2 or + higher) + :param limit: Maximum number of volumes to return. + :param sort_key: Key to be sorted; deprecated in kilo.(For V2 or + higher) + :param sort_dir: Sort direction, should be 'desc' or 'asc'; deprecated + in kilo. (For V2 or higher) + :param sort: Sort information """ - self.cinder.list_volumes(detailed) + self.cinder.list_volumes(detailed, search_opts=search_opts, + marker=marker, limit=limit, + sort_key=sort_key, sort_dir=sort_dir, + sort=sort) @validation.add("required_services", services=[consts.Service.CINDER]) diff --git a/rally_openstack/services/storage/block.py b/rally_openstack/services/storage/block.py old mode 100644 new mode 100755 index 16f313e6..d13a242f --- a/rally_openstack/services/storage/block.py +++ b/rally_openstack/services/storage/block.py @@ -82,13 +82,24 @@ class BlockStorage(service.UnifiedService): multiattach=multiattach, backup_id=backup_id) @service.should_be_overridden - def list_volumes(self, detailed=True): + def list_volumes(self, detailed=True, search_opts=None, marker=None, + limit=None, sort_key=None, sort_dir=None, sort=None): """Lists all volumes. :param detailed: Whether to return detailed volume info. + :param search_opts: Search options to filter out volumes. + :param marker: Begin returning volumes that appear later in the volume + list than that represented by this volume id. + :param limit: Maximum number of volumes to return. + :param sort_key: Key to be sorted; deprecated in kilo + :param sort_dir: Sort direction, should be 'desc' or 'asc'; deprecated + in kilo + :param sort: Sort information :returns: Return volumes list. """ - return self._impl.list_volumes(detailed=detailed) + return self._impl.list_volumes( + detailed=detailed, search_opts=search_opts, marker=marker, + limit=limit, sort_key=sort_key, sort_dir=sort_dir, sort=sort) @service.should_be_overridden def get_volume(self, volume_id): diff --git a/rally_openstack/services/storage/cinder_common.py b/rally_openstack/services/storage/cinder_common.py old mode 100644 new mode 100755 index f53ccb9a..9dcf2336 --- a/rally_openstack/services/storage/cinder_common.py +++ b/rally_openstack/services/storage/cinder_common.py @@ -58,12 +58,6 @@ class CinderMixin(object): check_interval=CONF.openstack.cinder_volume_create_poll_interval ) - def list_volumes(self, detailed=True): - """List all volumes.""" - aname = "cinder_v%s.list_volumes" % self.version - with atomic.ActionTimer(self, aname): - return self._get_client().volumes.list(detailed) - def get_volume(self, volume_id): """Get target volume information.""" aname = "cinder_v%s.get_volume" % self.version diff --git a/rally_openstack/services/storage/cinder_v1.py b/rally_openstack/services/storage/cinder_v1.py old mode 100644 new mode 100755 index d32363b9..b20d5c20 --- a/rally_openstack/services/storage/cinder_v1.py +++ b/rally_openstack/services/storage/cinder_v1.py @@ -93,6 +93,13 @@ class CinderV1Service(service.Service, cinder_common.CinderMixin): volume_id, **kwargs) return updated_volume["volume"] + @atomic.action_timer("cinder_v1.list_volumes") + def list_volumes(self, detailed=True, search_opts=None, limit=None): + """List all volumes.""" + return self._get_client().volumes.list(detailed=detailed, + search_opts=search_opts, + limit=limit) + @atomic.action_timer("cinder_v1.list_types") def list_types(self, search_opts=None): """Lists all volume types.""" @@ -209,14 +216,25 @@ class UnifiedCinderV1Service(cinder_common.UnifiedCinderMixin, project_id=project_id, availability_zone=availability_zone, metadata=metadata, imageRef=imageRef)) - def list_volumes(self, detailed=True): + def list_volumes(self, detailed=True, search_opts=None, marker=None, + limit=None, sort_key=None, sort_dir=None, sort=None): """Lists all volumes. :param detailed: Whether to return detailed volume info. + :param search_opts: Search options to filter out volumes. + :param marker: Begin returning volumes that appear later in the volume + list than that represented by this volume id.(IGNORED) + :param limit: Maximum number of volumes to return. + :param sort_key: Key to be sorted; deprecated in kilo(IGNORED) + :param sort_dir: Sort direction, should be 'desc' or 'asc'; deprecated + in kilo(IGNORED) + :param sort: Sort information(IGNORED) :returns: Return volumes list. """ return [self._unify_volume(volume) - for volume in self._impl.list_volumes(detailed=detailed)] + for volume in self._impl.list_volumes(detailed=detailed, + search_opts=search_opts, + limit=limit)] def get_volume(self, volume_id): """Get a volume. diff --git a/rally_openstack/services/storage/cinder_v2.py b/rally_openstack/services/storage/cinder_v2.py old mode 100644 new mode 100755 index 0bb20114..d1ea64fa --- a/rally_openstack/services/storage/cinder_v2.py +++ b/rally_openstack/services/storage/cinder_v2.py @@ -96,6 +96,14 @@ class CinderV2Service(service.Service, cinder_common.CinderMixin): volume_id, **kwargs) return updated_volume["volume"] + @atomic.action_timer("cinder_v2.list_volumes") + def list_volumes(self, detailed=True, search_opts=None, marker=None, + limit=None, sort_key=None, sort_dir=None, sort=None): + """List all volumes.""" + return self._get_client().volumes.list( + detailed=detailed, search_opts=search_opts, marker=marker, + limit=limit, sort_key=sort_key, sort_dir=sort_dir, sort=sort) + @atomic.action_timer("cinder_v2.list_types") def list_types(self, search_opts=None, is_public=None): """Lists all volume types.""" @@ -267,14 +275,25 @@ class UnifiedCinderV2Service(cinder_common.UnifiedCinderMixin, imageRef=imageRef, scheduler_hints=scheduler_hints, multiattach=multiattach)) - def list_volumes(self, detailed=True): + def list_volumes(self, detailed=True, search_opts=None, marker=None, + limit=None, sort_key=None, sort_dir=None, sort=None): """Lists all volumes. :param detailed: Whether to return detailed volume info. + :param search_opts: Search options to filter out volumes. + :param marker: Begin returning volumes that appear later in the volume + list than that represented by this volume id. + :param limit: Maximum number of volumes to return. + :param sort_key: Key to be sorted; deprecated in kilo + :param sort_dir: Sort direction, should be 'desc' or 'asc'; deprecated + in kilo + :param sort: Sort information :returns: Return volumes list. """ return [self._unify_volume(volume) - for volume in self._impl.list_volumes(detailed=detailed)] + for volume in self._impl.list_volumes( + detailed=detailed, search_opts=search_opts, marker=marker, + limit=limit, sort_key=sort_key, sort_dir=sort_dir, sort=sort)] def get_volume(self, volume_id): """Get a volume. diff --git a/rally_openstack/services/storage/cinder_v3.py b/rally_openstack/services/storage/cinder_v3.py old mode 100644 new mode 100755 index c7fd01d7..584be7d8 --- a/rally_openstack/services/storage/cinder_v3.py +++ b/rally_openstack/services/storage/cinder_v3.py @@ -98,6 +98,14 @@ class CinderV3Service(service.Service, cinder_common.CinderMixin): volume_id, **kwargs) return updated_volume["volume"] + @atomic.action_timer("cinder_v3.list_volumes") + def list_volumes(self, detailed=True, search_opts=None, marker=None, + limit=None, sort_key=None, sort_dir=None, sort=None): + """List all volumes.""" + return self._get_client().volumes.list( + detailed=detailed, search_opts=search_opts, marker=marker, + limit=limit, sort_key=sort_key, sort_dir=sort_dir, sort=sort) + @atomic.action_timer("cinder_v3.list_types") def list_types(self, search_opts=None, is_public=None): """Lists all volume types.""" @@ -271,14 +279,25 @@ class UnifiedCinderV3Service(cinder_common.UnifiedCinderMixin, imageRef=imageRef, scheduler_hints=scheduler_hints, multiattach=multiattach, backup_id=backup_id)) - def list_volumes(self, detailed=True): + def list_volumes(self, detailed=True, search_opts=None, marker=None, + limit=None, sort_key=None, sort_dir=None, sort=None): """Lists all volumes. :param detailed: Whether to return detailed volume info. + :param search_opts: Search options to filter out volumes. + :param marker: Begin returning volumes that appear later in the volume + list than that represented by this volume id. + :param limit: Maximum number of volumes to return. + :param sort_key: Key to be sorted; deprecated in kilo + :param sort_dir: Sort direction, should be 'desc' or 'asc'; deprecated + in kilo + :param sort: Sort information :returns: Return volumes list. """ return [self._unify_volume(volume) - for volume in self._impl.list_volumes(detailed=detailed)] + for volume in self._impl.list_volumes( + detailed=detailed, search_opts=search_opts, marker=marker, + limit=limit, sort_key=sort_key, sort_dir=sort_dir, sort=sort)] def get_volume(self, volume_id): """Get a volume. diff --git a/tests/unit/scenarios/cinder/test_volumes.py b/tests/unit/scenarios/cinder/test_volumes.py old mode 100644 new mode 100755 index c9789065..7da59a14 --- a/tests/unit/scenarios/cinder/test_volumes.py +++ b/tests/unit/scenarios/cinder/test_volumes.py @@ -66,7 +66,9 @@ class CinderServersTestCase(test.ScenarioTestCase): mock_service = self.mock_cinder.return_value scenario = volumes.ListVolumes(self._get_context()) scenario.run(True) - mock_service.list_volumes.assert_called_once_with(True) + mock_service.list_volumes.assert_called_once_with( + True, limit=None, marker=None, search_opts=None, sort=None, + sort_dir=None, sort_key=None) def test_list_types(self): mock_service = self.mock_cinder.return_value diff --git a/tests/unit/services/storage/test_block.py b/tests/unit/services/storage/test_block.py old mode 100644 new mode 100755 index 47965e7c..ba9ec179 --- a/tests/unit/services/storage/test_block.py +++ b/tests/unit/services/storage/test_block.py @@ -45,7 +45,9 @@ class BlockTestCase(test.TestCase): def test_list_volumes(self): self.assertEqual(self.service._impl.list_volumes.return_value, self.service.list_volumes(detailed=True)) - self.service._impl.list_volumes.assert_called_once_with(detailed=True) + self.service._impl.list_volumes.assert_called_once_with( + detailed=True, limit=None, marker=None, search_opts=None, + sort=None, sort_dir=None, sort_key=None) def test_get_volume(self): self.assertTrue(self.service._impl.get_volume.return_value, diff --git a/tests/unit/services/storage/test_cinder_common.py b/tests/unit/services/storage/test_cinder_common.py old mode 100644 new mode 100755 index 5927501c..262adf57 --- a/tests/unit/services/storage/test_cinder_common.py +++ b/tests/unit/services/storage/test_cinder_common.py @@ -111,11 +111,6 @@ class CinderMixinTestCase(test.ScenarioTestCase): check_interval=CONF.openstack.cinder_volume_create_poll_interval ) - def test_list_volumes(self): - self.assertEqual(self.cinder.volumes.list.return_value, - self.service.list_volumes()) - self.cinder.volumes.list.assert_called_once_with(True) - def test_get_volume(self): self.assertEqual(self.cinder.volumes.get.return_value, self.service.get_volume(1)) diff --git a/tests/unit/services/storage/test_cinder_v1.py b/tests/unit/services/storage/test_cinder_v1.py old mode 100644 new mode 100755 index c720ee57..26963d62 --- a/tests/unit/services/storage/test_cinder_v1.py +++ b/tests/unit/services/storage/test_cinder_v1.py @@ -110,6 +110,16 @@ class CinderV1ServiceTestCase(test.ScenarioTestCase): self._test_atomic_action_timer(self.atomic_actions(), "cinder_v1.update_volume") + def test_list_volumes(self): + self.assertEqual(self.cinder.volumes.list.return_value, + self.service.list_volumes( + detailed=False, search_opts=None, limit=1)) + self.cinder.volumes.list.assert_called_once_with( + detailed=False, search_opts=None, limit=1 + ) + self._test_atomic_action_timer(self.atomic_actions(), + "cinder_v1.list_volumes") + def test_list_types(self): self.assertEqual(self.cinder.volume_types.list.return_value, self.service.list_types(search_opts=None)) @@ -266,7 +276,8 @@ class UnifiedCinderV1ServiceTestCase(test.TestCase): self.service._impl.list_volumes.return_value = ["vol"] self.assertEqual([self.service._unify_volume.return_value], self.service.list_volumes(detailed=True)) - self.service._impl.list_volumes.assert_called_once_with(detailed=True) + self.service._impl.list_volumes.assert_called_once_with( + detailed=True, limit=None, search_opts=None) self.service._unify_volume.assert_called_once_with("vol") def test_get_volume(self): diff --git a/tests/unit/services/storage/test_cinder_v2.py b/tests/unit/services/storage/test_cinder_v2.py old mode 100644 new mode 100755 index de1a2f49..45b2fe04 --- a/tests/unit/services/storage/test_cinder_v2.py +++ b/tests/unit/services/storage/test_cinder_v2.py @@ -112,6 +112,21 @@ class CinderV2ServiceTestCase(test.ScenarioTestCase): self._test_atomic_action_timer(self.atomic_actions(), "cinder_v2.update_volume") + def test_list_volumes(self): + self.assertEqual(self.cinder.volumes.list.return_value, + self.service.list_volumes( + detailed=False, search_opts=None, limit=1, + marker=None, sort_key=None, sort_dir=None, + sort=None + )) + self.cinder.volumes.list.assert_called_once_with( + detailed=False, search_opts=None, limit=1, + marker=None, sort_key=None, sort_dir=None, + sort=None + ) + self._test_atomic_action_timer(self.atomic_actions(), + "cinder_v2.list_volumes") + def test_list_types(self): self.assertEqual(self.cinder.volume_types.list.return_value, self.service.list_types(search_opts=None, @@ -314,7 +329,9 @@ class UnifiedCinderV2ServiceTestCase(test.TestCase): self.service._impl.list_volumes.return_value = ["vol"] self.assertEqual([self.service._unify_volume.return_value], self.service.list_volumes(detailed=True)) - self.service._impl.list_volumes.assert_called_once_with(detailed=True) + self.service._impl.list_volumes.assert_called_once_with( + detailed=True, limit=None, marker=None, search_opts=None, + sort=None, sort_dir=None, sort_key=None) self.service._unify_volume.assert_called_once_with("vol") def test_get_volume(self): diff --git a/tests/unit/services/storage/test_cinder_v3.py b/tests/unit/services/storage/test_cinder_v3.py old mode 100644 new mode 100755 index 33598d67..8cbcaadb --- a/tests/unit/services/storage/test_cinder_v3.py +++ b/tests/unit/services/storage/test_cinder_v3.py @@ -116,6 +116,21 @@ class CinderV3ServiceTestCase(test.ScenarioTestCase): self._test_atomic_action_timer(self.atomic_actions(), "cinder_v3.update_volume") + def test_list_volumes(self): + self.assertEqual(self.cinder.volumes.list.return_value, + self.service.list_volumes( + detailed=False, search_opts=None, limit=1, + marker=None, sort_key=None, sort_dir=None, + sort=None + )) + self.cinder.volumes.list.assert_called_once_with( + detailed=False, search_opts=None, limit=1, + marker=None, sort_key=None, sort_dir=None, + sort=None + ) + self._test_atomic_action_timer(self.atomic_actions(), + "cinder_v3.list_volumes") + def test_list_types(self): self.assertEqual(self.cinder.volume_types.list.return_value, self.service.list_types(search_opts=None, @@ -318,7 +333,9 @@ class UnifiedCinderV3ServiceTestCase(test.TestCase): self.service._impl.list_volumes.return_value = ["vol"] self.assertEqual([self.service._unify_volume.return_value], self.service.list_volumes(detailed=True)) - self.service._impl.list_volumes.assert_called_once_with(detailed=True) + self.service._impl.list_volumes.assert_called_once_with( + detailed=True, limit=None, marker=None, search_opts=None, + sort=None, sort_dir=None, sort_key=None) self.service._unify_volume.assert_called_once_with("vol") def test_get_volume(self):