Merge "Add transfer-list --sort argument"
This commit is contained in:
commit
67dcd42291
cinderclient
releasenotes/notes
@ -29,7 +29,7 @@ LOG = logging.getLogger(__name__)
|
||||
# key is a deprecated version and value is an alternative version.
|
||||
DEPRECATED_VERSIONS = {"1": "2"}
|
||||
DEPRECATED_VERSION = "2.0"
|
||||
MAX_VERSION = "3.58"
|
||||
MAX_VERSION = "3.59"
|
||||
MIN_VERSION = "3.0"
|
||||
|
||||
_SUBSTITUTIONS = {}
|
||||
|
@ -1391,3 +1391,24 @@ class ShellTest(utils.TestCase):
|
||||
'no_snapshots': True
|
||||
}}
|
||||
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):
|
||||
self.run_command(
|
||||
'--os-volume-api-version 3.59 transfer-list')
|
||||
url = ('/volume-transfers/detail')
|
||||
self.assert_called('GET', url)
|
||||
|
@ -2542,3 +2542,53 @@ def do_transfer_create(cs, args):
|
||||
|
||||
info.pop('links', None)
|
||||
utils.print_dict(info)
|
||||
|
||||
|
||||
@utils.arg('--all-tenants',
|
||||
dest='all_tenants',
|
||||
metavar='<0|1>',
|
||||
nargs='?',
|
||||
type=int,
|
||||
const=1,
|
||||
default=0,
|
||||
help='Shows details for all tenants. Admin only.')
|
||||
@utils.arg('--all_tenants',
|
||||
nargs='?',
|
||||
type=int,
|
||||
const=1,
|
||||
help=argparse.SUPPRESS)
|
||||
@utils.arg('--sort',
|
||||
metavar='<key>[:<direction>]',
|
||||
default=None,
|
||||
help='Sort keys and directions in the form of <key>[:<asc|desc>].',
|
||||
start_version='3.59')
|
||||
def do_transfer_list(cs, args):
|
||||
"""Lists all transfers."""
|
||||
all_tenants = int(os.environ.get("ALL_TENANTS", args.all_tenants))
|
||||
search_opts = {
|
||||
'all_tenants': all_tenants,
|
||||
}
|
||||
|
||||
sort = getattr(args, 'sort', None)
|
||||
sort_key = None
|
||||
sort_dir = None
|
||||
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(':')
|
||||
if len(sort_args) > 2:
|
||||
raise exceptions.CommandError(
|
||||
'Invalid sort parameter provided. Argument must be in the '
|
||||
'form "key[:<asc|desc>]".')
|
||||
|
||||
sort_key = sort_args[0]
|
||||
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']
|
||||
utils.print_list(transfers, columns)
|
||||
|
@ -16,7 +16,6 @@
|
||||
"""Volume transfer interface (v3 extension)."""
|
||||
|
||||
from cinderclient import base
|
||||
from cinderclient import utils
|
||||
from cinderclient.v2 import volume_transfers
|
||||
|
||||
|
||||
@ -63,25 +62,24 @@ class VolumeTransferManager(volume_transfers.VolumeTransferManager):
|
||||
|
||||
return self._get("/os-volume-transfer/%s" % transfer_id, "transfer")
|
||||
|
||||
def list(self, detailed=True, search_opts=None):
|
||||
def list(self, detailed=True, search_opts=None, sort_key=None,
|
||||
sort_dir=None):
|
||||
"""Get a list of all volume transfer.
|
||||
|
||||
:param detailed: Get detailed object information.
|
||||
:param search_opts: Filtering options.
|
||||
:param sort_key: Optional key to sort on.
|
||||
:param sort_dir: Optional direction to sort.
|
||||
:rtype: list of :class:`VolumeTransfer`
|
||||
"""
|
||||
query_string = utils.build_query_param(search_opts)
|
||||
|
||||
detail = ""
|
||||
if detailed:
|
||||
detail = "/detail"
|
||||
|
||||
resource_type = 'os-volume-transfer'
|
||||
if self.api_version.matches('3.55'):
|
||||
return self._list("/volume-transfers%s%s" % (detail, query_string),
|
||||
"transfers")
|
||||
resource_type = 'volume-transfers'
|
||||
|
||||
return self._list("/os-volume-transfer%s%s" % (detail, query_string),
|
||||
"transfers")
|
||||
url = self._build_list_url(resource_type, detailed=detailed,
|
||||
search_opts=search_opts,
|
||||
sort_key=sort_key, sort_dir=sort_dir)
|
||||
return self._list(url, 'transfers')
|
||||
|
||||
def delete(self, transfer_id):
|
||||
"""Delete a volume transfer.
|
||||
|
8
releasenotes/notes/transfer-sort-ca622e9b8da605c1.yaml
Normal file
8
releasenotes/notes/transfer-sort-ca622e9b8da605c1.yaml
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Starting with microversion 3.59, the ``cinder transfer-list`` command now
|
||||
supports the ``--sort`` argument to sort the returned results. This
|
||||
argument takes either just the attribute to sort on, or the attribute and
|
||||
the sort direction. Examples include ``cinder transfer-list --sort=id`` and
|
||||
``cinder transfer-list --sort=name:asc``.
|
Loading…
x
Reference in New Issue
Block a user