Extend list_volumes arguments

Support the all arguments of volumes.list in list_volumes

Change-Id: Ib52166dc2ea3ab5684b164ce09235055a14dea83
This commit is contained in:
chenhb 2018-10-15 17:30:19 +08:00
parent 81ab47030e
commit 690c6bec46
13 changed files with 150 additions and 26 deletions

View File

@ -24,6 +24,11 @@ Added
* Added neutron trunk scenarios
Changed
~~~~~~~
* Extend CinderVolumes.list_volumes scenario arguments.
[1.3.0] - 2018-10-08
--------------------

18
rally_openstack/scenarios/cinder/volumes.py Normal file → Executable file
View File

@ -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])

15
rally_openstack/services/storage/block.py Normal file → Executable file
View File

@ -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):

6
rally_openstack/services/storage/cinder_common.py Normal file → Executable file
View File

@ -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

22
rally_openstack/services/storage/cinder_v1.py Normal file → Executable file
View File

@ -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.

23
rally_openstack/services/storage/cinder_v2.py Normal file → Executable file
View File

@ -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.

23
rally_openstack/services/storage/cinder_v3.py Normal file → Executable file
View File

@ -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.

4
tests/unit/scenarios/cinder/test_volumes.py Normal file → Executable file
View File

@ -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

4
tests/unit/services/storage/test_block.py Normal file → Executable file
View File

@ -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,

5
tests/unit/services/storage/test_cinder_common.py Normal file → Executable file
View File

@ -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))

13
tests/unit/services/storage/test_cinder_v1.py Normal file → Executable file
View File

@ -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):

19
tests/unit/services/storage/test_cinder_v2.py Normal file → Executable file
View File

@ -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):

19
tests/unit/services/storage/test_cinder_v3.py Normal file → Executable file
View File

@ -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):