volume: Add missing 'volume list --offset' parameter

Looking at the code for the ancient v1 cinder API, we see that this
supported offset-style pagination [1][2][3]. Add this parameter,
simplifying a future patch to standardize pagination across OSC.

[1] https://github.com/openstack/cinder/blob/juno-eol/cinder/api/v1/volumes.py#L259
[2] https://github.com/openstack/cinder/blob/juno-eol/cinder/api/v1/volumes.py#L292
[3] https://github.com/openstack/cinder/blob/juno-eol/cinder/api/common.py#L120

Change-Id: Ifec208ea9ed7afb4bebced6132abb96a3af034b5
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
This commit is contained in:
Stephen Finucane 2021-07-27 11:08:35 +01:00
parent c1209601b4
commit e0dc31f32e
2 changed files with 16 additions and 2 deletions

View File

@ -858,9 +858,10 @@ class TestVolumeList(TestVolume):
), )
self.assertItemsEqual(datalist, tuple(data))
def test_volume_list_with_limit(self):
def test_volume_list_with_limit_and_offset(self):
arglist = [
'--limit', '2',
'--offset', '5',
]
verifylist = [
('long', False),
@ -868,6 +869,7 @@ class TestVolumeList(TestVolume):
('name', None),
('status', None),
('limit', 2),
('offset', 5),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
@ -876,9 +878,11 @@ class TestVolumeList(TestVolume):
self.volumes_mock.list.assert_called_once_with(
limit=2,
search_opts={
'offset': 5,
'status': None,
'display_name': None,
'all_tenants': False, }
'all_tenants': False,
},
)
self.assertEqual(self.columns, columns)
self.assertItemsEqual(self.datalist, tuple(data))

View File

@ -327,6 +327,13 @@ class ListVolume(command.Lister):
default=False,
help=_('List additional fields in output'),
)
parser.add_argument(
'--offset',
type=int,
action=parseractions.NonNegativeAction,
metavar='<offset>',
help=_('Index from which to start listing volumes'),
)
parser.add_argument(
'--limit',
type=int,
@ -395,6 +402,9 @@ class ListVolume(command.Lister):
'status': parsed_args.status,
}
if parsed_args.offset:
search_opts['offset'] = parsed_args.offset
data = volume_client.volumes.list(
search_opts=search_opts,
limit=parsed_args.limit,