Merge "Drop support for --sort_key and --sort_dir"
This commit is contained in:
commit
a63d4d651a
|
@ -131,8 +131,7 @@ class Manager(common_base.HookableMixin):
|
||||||
return common_base.ListWithMeta(items, resp)
|
return common_base.ListWithMeta(items, resp)
|
||||||
|
|
||||||
def _build_list_url(self, resource_type, detailed=True, search_opts=None,
|
def _build_list_url(self, resource_type, detailed=True, search_opts=None,
|
||||||
marker=None, limit=None, sort_key=None, sort_dir=None,
|
marker=None, limit=None, sort=None, offset=None):
|
||||||
sort=None, offset=None):
|
|
||||||
|
|
||||||
if search_opts is None:
|
if search_opts is None:
|
||||||
search_opts = {}
|
search_opts = {}
|
||||||
|
@ -151,16 +150,6 @@ class Manager(common_base.HookableMixin):
|
||||||
if sort:
|
if sort:
|
||||||
query_params['sort'] = self._format_sort_param(sort,
|
query_params['sort'] = self._format_sort_param(sort,
|
||||||
resource_type)
|
resource_type)
|
||||||
else:
|
|
||||||
# sort_key and sort_dir deprecated in kilo, prefer sort
|
|
||||||
if sort_key:
|
|
||||||
query_params['sort_key'] = self._format_sort_key_param(
|
|
||||||
sort_key,
|
|
||||||
resource_type)
|
|
||||||
|
|
||||||
if sort_dir:
|
|
||||||
query_params['sort_dir'] = self._format_sort_dir_param(
|
|
||||||
sort_dir)
|
|
||||||
|
|
||||||
if offset:
|
if offset:
|
||||||
query_params['offset'] = offset
|
query_params['offset'] = offset
|
||||||
|
@ -179,7 +168,7 @@ class Manager(common_base.HookableMixin):
|
||||||
"query_string": query_string})
|
"query_string": query_string})
|
||||||
|
|
||||||
def _format_sort_param(self, sort, resource_type=None):
|
def _format_sort_param(self, sort, resource_type=None):
|
||||||
'''Formats the sort information into the sort query string parameter.
|
"""Formats the sort information into the sort query string parameter.
|
||||||
|
|
||||||
The input sort information can be any of the following:
|
The input sort information can be any of the following:
|
||||||
- Comma-separated string in the form of <key[:dir]>
|
- Comma-separated string in the form of <key[:dir]>
|
||||||
|
@ -195,7 +184,7 @@ class Manager(common_base.HookableMixin):
|
||||||
:returns: Formatted query string parameter or None
|
:returns: Formatted query string parameter or None
|
||||||
:raise ValueError: If an invalid sort direction or invalid sort key is
|
:raise ValueError: If an invalid sort direction or invalid sort key is
|
||||||
given
|
given
|
||||||
'''
|
"""
|
||||||
if not sort:
|
if not sort:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -205,11 +194,7 @@ class Manager(common_base.HookableMixin):
|
||||||
|
|
||||||
sort_array = []
|
sort_array = []
|
||||||
for sort_item in sort:
|
for sort_item in sort:
|
||||||
if isinstance(sort_item, tuple):
|
sort_key, _sep, sort_dir = sort_item.partition(':')
|
||||||
sort_key = sort_item[0]
|
|
||||||
sort_dir = sort_item[1]
|
|
||||||
else:
|
|
||||||
sort_key, _sep, sort_dir = sort_item.partition(':')
|
|
||||||
sort_key = sort_key.strip()
|
sort_key = sort_key.strip()
|
||||||
sort_key = self._format_sort_key_param(sort_key, resource_type)
|
sort_key = self._format_sort_key_param(sort_key, resource_type)
|
||||||
if sort_dir:
|
if sort_dir:
|
||||||
|
@ -237,14 +222,6 @@ class Manager(common_base.HookableMixin):
|
||||||
', '.join(valid_sort_keys))
|
', '.join(valid_sort_keys))
|
||||||
raise ValueError(msg)
|
raise ValueError(msg)
|
||||||
|
|
||||||
def _format_sort_dir_param(self, sort_dir):
|
|
||||||
if sort_dir in SORT_DIR_VALUES:
|
|
||||||
return sort_dir
|
|
||||||
|
|
||||||
msg = ('sort_dir must be one of the following: %s.'
|
|
||||||
% ', '.join(SORT_DIR_VALUES))
|
|
||||||
raise ValueError(msg)
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def completion_cache(self, cache_type, obj_class, mode):
|
def completion_cache(self, cache_type, obj_class, mode):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -219,37 +219,11 @@ class ShellTest(utils.TestCase):
|
||||||
mock_print.assert_called_once_with(mock.ANY, key_list,
|
mock_print.assert_called_once_with(mock.ANY, key_list,
|
||||||
exclude_unavailable=True, sortby_index=0)
|
exclude_unavailable=True, sortby_index=0)
|
||||||
|
|
||||||
def test_list_sort_valid(self):
|
|
||||||
self.run_command('list --sort_key=id --sort_dir=asc')
|
|
||||||
self.assert_called('GET', '/volumes/detail?sort_dir=asc&sort_key=id')
|
|
||||||
|
|
||||||
def test_list_sort_key_name(self):
|
|
||||||
# Client 'name' key is mapped to 'display_name'
|
|
||||||
self.run_command('list --sort_key=name')
|
|
||||||
self.assert_called('GET', '/volumes/detail?sort_key=display_name')
|
|
||||||
|
|
||||||
def test_list_sort_name(self):
|
def test_list_sort_name(self):
|
||||||
# Client 'name' key is mapped to 'display_name'
|
# Client 'name' key is mapped to 'display_name'
|
||||||
self.run_command('list --sort=name')
|
self.run_command('list --sort=name')
|
||||||
self.assert_called('GET', '/volumes/detail?sort=display_name')
|
self.assert_called('GET', '/volumes/detail?sort=display_name')
|
||||||
|
|
||||||
def test_list_sort_key_invalid(self):
|
|
||||||
self.assertRaises(ValueError,
|
|
||||||
self.run_command,
|
|
||||||
'list --sort_key=foo --sort_dir=asc')
|
|
||||||
|
|
||||||
def test_list_sort_dir_invalid(self):
|
|
||||||
self.assertRaises(ValueError,
|
|
||||||
self.run_command,
|
|
||||||
'list --sort_key=id --sort_dir=foo')
|
|
||||||
|
|
||||||
def test_list_mix_sort_args(self):
|
|
||||||
cmds = ['list --sort name:desc --sort_key=status',
|
|
||||||
'list --sort name:desc --sort_dir=asc',
|
|
||||||
'list --sort name:desc --sort_key=status --sort_dir=asc']
|
|
||||||
for cmd in cmds:
|
|
||||||
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
|
|
||||||
|
|
||||||
def test_list_sort_single_key_only(self):
|
def test_list_sort_single_key_only(self):
|
||||||
self.run_command('list --sort=id')
|
self.run_command('list --sort=id')
|
||||||
self.assert_called('GET', '/volumes/detail?sort=id')
|
self.assert_called('GET', '/volumes/detail?sort=id')
|
||||||
|
@ -277,10 +251,7 @@ class ShellTest(utils.TestCase):
|
||||||
|
|
||||||
def test_list_reorder_with_sort(self):
|
def test_list_reorder_with_sort(self):
|
||||||
# sortby_index is None if there is sort information
|
# sortby_index is None if there is sort information
|
||||||
for cmd in ['list --sort_key=name',
|
for cmd in ['list --sort=name',
|
||||||
'list --sort_dir=asc',
|
|
||||||
'list --sort_key=name --sort_dir=asc',
|
|
||||||
'list --sort=name',
|
|
||||||
'list --sort=name:asc']:
|
'list --sort=name:asc']:
|
||||||
with mock.patch('cinderclient.utils.print_list') as mock_print:
|
with mock.patch('cinderclient.utils.print_list') as mock_print:
|
||||||
self.run_command(cmd)
|
self.run_command(cmd)
|
||||||
|
|
|
@ -29,19 +29,6 @@ class VolumesTest(utils.TestCase):
|
||||||
cs.assert_called('GET', '/volumes/detail?limit=2&marker=1234')
|
cs.assert_called('GET', '/volumes/detail?limit=2&marker=1234')
|
||||||
self._assert_request_id(lst)
|
self._assert_request_id(lst)
|
||||||
|
|
||||||
def test_list_volumes_with_sort_key_dir(self):
|
|
||||||
lst = cs.volumes.list(sort_key='id', sort_dir='asc')
|
|
||||||
cs.assert_called('GET', '/volumes/detail?sort_dir=asc&sort_key=id')
|
|
||||||
self._assert_request_id(lst)
|
|
||||||
|
|
||||||
def test_list_volumes_with_invalid_sort_key(self):
|
|
||||||
self.assertRaises(ValueError,
|
|
||||||
cs.volumes.list, sort_key='invalid', sort_dir='asc')
|
|
||||||
|
|
||||||
def test_list_volumes_with_invalid_sort_dir(self):
|
|
||||||
self.assertRaises(ValueError,
|
|
||||||
cs.volumes.list, sort_key='id', sort_dir='invalid')
|
|
||||||
|
|
||||||
def test__list(self):
|
def test__list(self):
|
||||||
# There only 2 volumes available for our tests, so we set limit to 2.
|
# There only 2 volumes available for our tests, so we set limit to 2.
|
||||||
limit = 2
|
limit = 2
|
||||||
|
@ -345,21 +332,10 @@ class FormatSortParamTestCase(utils.TestCase):
|
||||||
self.assertEqual('id:asc,status,size:desc',
|
self.assertEqual('id:asc,status,size:desc',
|
||||||
cs.volumes._format_sort_param(s))
|
cs.volumes._format_sort_param(s))
|
||||||
|
|
||||||
def test_format_sort_list_of_tuples(self):
|
|
||||||
s = [('id', 'asc'), 'status', ('size', 'desc')]
|
|
||||||
self.assertEqual('id:asc,status,size:desc',
|
|
||||||
cs.volumes._format_sort_param(s))
|
|
||||||
|
|
||||||
def test_format_sort_list_of_strings_and_tuples(self):
|
|
||||||
s = [('id', 'asc'), 'status', 'size:desc']
|
|
||||||
self.assertEqual('id:asc,status,size:desc',
|
|
||||||
cs.volumes._format_sort_param(s))
|
|
||||||
|
|
||||||
def test_format_sort_invalid_direction(self):
|
def test_format_sort_invalid_direction(self):
|
||||||
for s in ['id:foo',
|
for s in ['id:foo',
|
||||||
'id:asc,status,size:foo',
|
'id:asc,status,size:foo',
|
||||||
['id', 'status', 'size:foo'],
|
['id', 'status', 'size:foo']]:
|
||||||
['id', 'status', ('size', 'foo')]]:
|
|
||||||
self.assertRaises(ValueError,
|
self.assertRaises(ValueError,
|
||||||
cs.volumes._format_sort_param,
|
cs.volumes._format_sort_param,
|
||||||
s)
|
s)
|
||||||
|
|
|
@ -1438,21 +1438,6 @@ class ShellTest(utils.TestCase):
|
||||||
}}
|
}}
|
||||||
self.assert_called('POST', '/volume-transfers', body=expected)
|
self.assert_called('POST', '/volume-transfers', body=expected)
|
||||||
|
|
||||||
def test_list_transfer_sort_key(self):
|
|
||||||
self.run_command(
|
|
||||||
'--os-volume-api-version 3.59 transfer-list --sort=id')
|
|
||||||
url = ('/volume-transfers/detail?%s' %
|
|
||||||
parse.urlencode([('sort_key', 'id')]))
|
|
||||||
self.assert_called('GET', url)
|
|
||||||
|
|
||||||
def test_list_transfer_sort_key_dir(self):
|
|
||||||
self.run_command(
|
|
||||||
'--os-volume-api-version 3.59 transfer-list --sort=id:asc')
|
|
||||||
url = ('/volume-transfers/detail?%s' %
|
|
||||||
parse.urlencode([('sort_dir', 'asc'),
|
|
||||||
('sort_key', 'id')]))
|
|
||||||
self.assert_called('GET', url)
|
|
||||||
|
|
||||||
def test_list_transfer_sorty_not_sorty(self):
|
def test_list_transfer_sorty_not_sorty(self):
|
||||||
self.run_command(
|
self.run_command(
|
||||||
'--os-volume-api-version 3.59 transfer-list')
|
'--os-volume-api-version 3.59 transfer-list')
|
||||||
|
|
|
@ -100,14 +100,6 @@ def _translate_attachments(info):
|
||||||
'Use the show command to see which fields are available. '
|
'Use the show command to see which fields are available. '
|
||||||
'Unavailable/non-existent fields will be ignored. '
|
'Unavailable/non-existent fields will be ignored. '
|
||||||
'Default=None.')
|
'Default=None.')
|
||||||
@utils.arg('--sort_key',
|
|
||||||
metavar='<sort_key>',
|
|
||||||
default=None,
|
|
||||||
help=argparse.SUPPRESS)
|
|
||||||
@utils.arg('--sort_dir',
|
|
||||||
metavar='<sort_dir>',
|
|
||||||
default=None,
|
|
||||||
help=argparse.SUPPRESS)
|
|
||||||
@utils.arg('--sort',
|
@utils.arg('--sort',
|
||||||
metavar='<key>[:<direction>]',
|
metavar='<key>[:<direction>]',
|
||||||
default=None,
|
default=None,
|
||||||
|
@ -147,16 +139,8 @@ def do_list(cs, args):
|
||||||
for field_title in args.fields.split(','):
|
for field_title in args.fields.split(','):
|
||||||
field_titles.append(field_title)
|
field_titles.append(field_title)
|
||||||
|
|
||||||
# --sort_key and --sort_dir deprecated in kilo and is not supported
|
|
||||||
# with --sort
|
|
||||||
if args.sort and (args.sort_key or args.sort_dir):
|
|
||||||
raise exceptions.CommandError(
|
|
||||||
'The --sort_key and --sort_dir arguments are deprecated and are '
|
|
||||||
'not supported with --sort.')
|
|
||||||
|
|
||||||
volumes = cs.volumes.list(search_opts=search_opts, marker=args.marker,
|
volumes = cs.volumes.list(search_opts=search_opts, marker=args.marker,
|
||||||
limit=args.limit, sort_key=args.sort_key,
|
limit=args.limit, sort=args.sort)
|
||||||
sort_dir=args.sort_dir, sort=args.sort)
|
|
||||||
shell_utils.translate_volume_keys(volumes)
|
shell_utils.translate_volume_keys(volumes)
|
||||||
|
|
||||||
# Create a list of servers to which the volume is attached
|
# Create a list of servers to which the volume is attached
|
||||||
|
@ -178,7 +162,7 @@ def do_list(cs, args):
|
||||||
if search_opts['all_tenants']:
|
if search_opts['all_tenants']:
|
||||||
key_list.insert(1, 'Tenant ID')
|
key_list.insert(1, 'Tenant ID')
|
||||||
|
|
||||||
if args.sort_key or args.sort_dir or args.sort:
|
if args.sort:
|
||||||
sortby_index = None
|
sortby_index = None
|
||||||
else:
|
else:
|
||||||
sortby_index = 0
|
sortby_index = 0
|
||||||
|
|
|
@ -281,7 +281,7 @@ class VolumeManager(base.ManagerWithFind):
|
||||||
return self._get("/volumes/%s" % volume_id, "volume")
|
return self._get("/volumes/%s" % volume_id, "volume")
|
||||||
|
|
||||||
def list(self, detailed=True, search_opts=None, marker=None, limit=None,
|
def list(self, detailed=True, search_opts=None, marker=None, limit=None,
|
||||||
sort_key=None, sort_dir=None, sort=None):
|
sort=None):
|
||||||
"""Lists all volumes.
|
"""Lists all volumes.
|
||||||
|
|
||||||
:param detailed: Whether to return detailed volume info.
|
:param detailed: Whether to return detailed volume info.
|
||||||
|
@ -289,9 +289,6 @@ class VolumeManager(base.ManagerWithFind):
|
||||||
:param marker: Begin returning volumes that appear later in the volume
|
:param marker: Begin returning volumes that appear later in the volume
|
||||||
list than that represented by this volume id.
|
list than that represented by this volume id.
|
||||||
:param limit: Maximum number of volumes to return.
|
: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
|
:param sort: Sort information
|
||||||
:rtype: list of :class:`Volume`
|
:rtype: list of :class:`Volume`
|
||||||
"""
|
"""
|
||||||
|
@ -299,8 +296,7 @@ class VolumeManager(base.ManagerWithFind):
|
||||||
resource_type = "volumes"
|
resource_type = "volumes"
|
||||||
url = self._build_list_url(resource_type, detailed=detailed,
|
url = self._build_list_url(resource_type, detailed=detailed,
|
||||||
search_opts=search_opts, marker=marker,
|
search_opts=search_opts, marker=marker,
|
||||||
limit=limit, sort_key=sort_key,
|
limit=limit, sort=sort)
|
||||||
sort_dir=sort_dir, sort=sort)
|
|
||||||
return self._list(url, resource_type, limit=limit)
|
return self._list(url, resource_type, limit=limit)
|
||||||
|
|
||||||
def delete(self, volume, cascade=False):
|
def delete(self, volume, cascade=False):
|
||||||
|
|
|
@ -45,7 +45,7 @@ class VolumeAttachmentManager(base.ManagerWithFind):
|
||||||
|
|
||||||
@api_versions.wraps('3.27')
|
@api_versions.wraps('3.27')
|
||||||
def list(self, detailed=False, search_opts=None, marker=None, limit=None,
|
def list(self, detailed=False, search_opts=None, marker=None, limit=None,
|
||||||
sort_key=None, sort_dir=None, sort=None):
|
sort=None):
|
||||||
"""List all attachments."""
|
"""List all attachments."""
|
||||||
resource_type = "attachments"
|
resource_type = "attachments"
|
||||||
url = self._build_list_url(resource_type,
|
url = self._build_list_url(resource_type,
|
||||||
|
@ -53,8 +53,7 @@ class VolumeAttachmentManager(base.ManagerWithFind):
|
||||||
search_opts=search_opts,
|
search_opts=search_opts,
|
||||||
marker=marker,
|
marker=marker,
|
||||||
limit=limit,
|
limit=limit,
|
||||||
sort_key=sort_key,
|
sort=sort)
|
||||||
sort_dir=sort_dir, sort=sort)
|
|
||||||
return self._list(url, resource_type, limit=limit)
|
return self._list(url, resource_type, limit=limit)
|
||||||
|
|
||||||
@api_versions.wraps('3.27')
|
@api_versions.wraps('3.27')
|
||||||
|
|
|
@ -337,14 +337,6 @@ RESET_STATE_RESOURCES = {'volume': utils.find_volume,
|
||||||
'Use the show command to see which fields are available. '
|
'Use the show command to see which fields are available. '
|
||||||
'Unavailable/non-existent fields will be ignored. '
|
'Unavailable/non-existent fields will be ignored. '
|
||||||
'Default=None.')
|
'Default=None.')
|
||||||
@utils.arg('--sort_key',
|
|
||||||
metavar='<sort_key>',
|
|
||||||
default=None,
|
|
||||||
help=argparse.SUPPRESS)
|
|
||||||
@utils.arg('--sort_dir',
|
|
||||||
metavar='<sort_dir>',
|
|
||||||
default=None,
|
|
||||||
help=argparse.SUPPRESS)
|
|
||||||
@utils.arg('--sort',
|
@utils.arg('--sort',
|
||||||
metavar='<key>[:<direction>]',
|
metavar='<key>[:<direction>]',
|
||||||
default=None,
|
default=None,
|
||||||
|
@ -412,24 +404,15 @@ def do_list(cs, args):
|
||||||
for field_title in args.fields.split(','):
|
for field_title in args.fields.split(','):
|
||||||
field_titles.append(field_title)
|
field_titles.append(field_title)
|
||||||
|
|
||||||
# --sort_key and --sort_dir deprecated in kilo and is not supported
|
|
||||||
# with --sort
|
|
||||||
if args.sort and (args.sort_key or args.sort_dir):
|
|
||||||
raise exceptions.CommandError(
|
|
||||||
'The --sort_key and --sort_dir arguments are deprecated and are '
|
|
||||||
'not supported with --sort.')
|
|
||||||
|
|
||||||
total_count = 0
|
total_count = 0
|
||||||
if show_count:
|
if show_count:
|
||||||
search_opts['with_count'] = args.with_count
|
search_opts['with_count'] = args.with_count
|
||||||
volumes, total_count = cs.volumes.list(
|
volumes, total_count = cs.volumes.list(
|
||||||
search_opts=search_opts, marker=args.marker,
|
search_opts=search_opts, marker=args.marker,
|
||||||
limit=args.limit, sort_key=args.sort_key,
|
limit=args.limit, sort=args.sort)
|
||||||
sort_dir=args.sort_dir, sort=args.sort)
|
|
||||||
else:
|
else:
|
||||||
volumes = cs.volumes.list(search_opts=search_opts, marker=args.marker,
|
volumes = cs.volumes.list(search_opts=search_opts, marker=args.marker,
|
||||||
limit=args.limit, sort_key=args.sort_key,
|
limit=args.limit, sort=args.sort)
|
||||||
sort_dir=args.sort_dir, sort=args.sort)
|
|
||||||
shell_utils.translate_volume_keys(volumes)
|
shell_utils.translate_volume_keys(volumes)
|
||||||
|
|
||||||
# Create a list of servers to which the volume is attached
|
# Create a list of servers to which the volume is attached
|
||||||
|
@ -465,7 +448,7 @@ def do_list(cs, args):
|
||||||
if search_opts['all_tenants']:
|
if search_opts['all_tenants']:
|
||||||
key_list.insert(1, 'Tenant ID')
|
key_list.insert(1, 'Tenant ID')
|
||||||
|
|
||||||
if args.sort_key or args.sort_dir or args.sort:
|
if args.sort:
|
||||||
sortby_index = None
|
sortby_index = None
|
||||||
else:
|
else:
|
||||||
sortby_index = 0
|
sortby_index = 0
|
||||||
|
@ -2591,25 +2574,13 @@ def do_transfer_list(cs, args):
|
||||||
}
|
}
|
||||||
|
|
||||||
sort = getattr(args, 'sort', None)
|
sort = getattr(args, 'sort', None)
|
||||||
sort_key = None
|
|
||||||
sort_dir = None
|
|
||||||
if sort:
|
if sort:
|
||||||
# We added this feature with sort_key and sort_dir, but that was a
|
|
||||||
# mistake as we've deprecated that construct a long time ago and should
|
|
||||||
# be removing it in favor of --sort. Too late for the service side, but
|
|
||||||
# to make the client experience consistent, we handle the compatibility
|
|
||||||
# here.
|
|
||||||
sort_args = sort.split(':')
|
sort_args = sort.split(':')
|
||||||
if len(sort_args) > 2:
|
if len(sort_args) > 2:
|
||||||
raise exceptions.CommandError(
|
raise exceptions.CommandError(
|
||||||
'Invalid sort parameter provided. Argument must be in the '
|
'Invalid sort parameter provided. Argument must be in the '
|
||||||
'form "key[:<asc|desc>]".')
|
'form "key[:<asc|desc>]".')
|
||||||
|
|
||||||
sort_key = sort_args[0]
|
transfers = cs.transfers.list(search_opts=search_opts, sort=sort)
|
||||||
if len(sort_args) == 2:
|
|
||||||
sort_dir = sort_args[1]
|
|
||||||
|
|
||||||
transfers = cs.transfers.list(
|
|
||||||
search_opts=search_opts, sort_key=sort_key, sort_dir=sort_dir)
|
|
||||||
columns = ['ID', 'Volume ID', 'Name']
|
columns = ['ID', 'Volume ID', 'Name']
|
||||||
utils.print_list(transfers, columns)
|
utils.print_list(transfers, columns)
|
||||||
|
|
|
@ -62,14 +62,12 @@ class VolumeTransferManager(volume_transfers.VolumeTransferManager):
|
||||||
|
|
||||||
return self._get("/os-volume-transfer/%s" % transfer_id, "transfer")
|
return self._get("/os-volume-transfer/%s" % transfer_id, "transfer")
|
||||||
|
|
||||||
def list(self, detailed=True, search_opts=None, sort_key=None,
|
def list(self, detailed=True, search_opts=None, sort=None):
|
||||||
sort_dir=None):
|
|
||||||
"""Get a list of all volume transfer.
|
"""Get a list of all volume transfer.
|
||||||
|
|
||||||
:param detailed: Get detailed object information.
|
:param detailed: Get detailed object information.
|
||||||
:param search_opts: Filtering options.
|
:param search_opts: Filtering options.
|
||||||
:param sort_key: Optional key to sort on.
|
:param sort: Sort information
|
||||||
:param sort_dir: Optional direction to sort.
|
|
||||||
:rtype: list of :class:`VolumeTransfer`
|
:rtype: list of :class:`VolumeTransfer`
|
||||||
"""
|
"""
|
||||||
resource_type = 'os-volume-transfer'
|
resource_type = 'os-volume-transfer'
|
||||||
|
@ -78,7 +76,7 @@ class VolumeTransferManager(volume_transfers.VolumeTransferManager):
|
||||||
|
|
||||||
url = self._build_list_url(resource_type, detailed=detailed,
|
url = self._build_list_url(resource_type, detailed=detailed,
|
||||||
search_opts=search_opts,
|
search_opts=search_opts,
|
||||||
sort_key=sort_key, sort_dir=sort_dir)
|
sort=sort)
|
||||||
return self._list(url, 'transfers')
|
return self._list(url, 'transfers')
|
||||||
|
|
||||||
def delete(self, transfer_id):
|
def delete(self, transfer_id):
|
||||||
|
|
|
@ -26,3 +26,6 @@ upgrade:
|
||||||
The deprecated volume create option ``--allow-multiattach`` has now been
|
The deprecated volume create option ``--allow-multiattach`` has now been
|
||||||
removed. Multiattach capability is now controlled using `volume-type extra
|
removed. Multiattach capability is now controlled using `volume-type extra
|
||||||
specs <https://docs.openstack.org/cinder/latest/admin/blockstorage-volume-multiattach.html>`_.
|
specs <https://docs.openstack.org/cinder/latest/admin/blockstorage-volume-multiattach.html>`_.
|
||||||
|
- |
|
||||||
|
Support for the deprecated ``--sort_key`` and ``--sort_dir`` arguments have
|
||||||
|
now been dropped. Use the supported ``--sort`` argument instead.
|
||||||
|
|
Loading…
Reference in New Issue