summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2019-08-30 18:15:41 +0000
committerGerrit Code Review <review@openstack.org>2019-08-30 18:15:41 +0000
commit67dcd422916937dbb17f6b901f318f10e5964313 (patch)
tree1454e98201bfb8ea128d7179d4d811ccaf2370f5
parente23d9780bf222986d3764f1cdfd03100a29929ca (diff)
parent8b1ed34ec1b01ad77f1008a464302d94fa14c7b6 (diff)
downloadpython-cinderclient-67dcd422916937dbb17f6b901f318f10e5964313.tar.gz
Merge "Add transfer-list --sort argument"
-rw-r--r--cinderclient/api_versions.py2
-rw-r--r--cinderclient/tests/unit/v3/test_shell.py21
-rw-r--r--cinderclient/v3/shell.py50
-rw-r--r--cinderclient/v3/volume_transfers.py22
-rw-r--r--releasenotes/notes/transfer-sort-ca622e9b8da605c1.yaml8
5 files changed, 90 insertions, 13 deletions
diff --git a/cinderclient/api_versions.py b/cinderclient/api_versions.py
index 5fa6340..2769e96 100644
--- a/cinderclient/api_versions.py
+++ b/cinderclient/api_versions.py
@@ -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 = {}
diff --git a/cinderclient/tests/unit/v3/test_shell.py b/cinderclient/tests/unit/v3/test_shell.py
index dd244e0..cc3372c 100644
--- a/cinderclient/tests/unit/v3/test_shell.py
+++ b/cinderclient/tests/unit/v3/test_shell.py
@@ -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)
diff --git a/cinderclient/v3/shell.py b/cinderclient/v3/shell.py
index e69a411..436c80c 100644
--- a/cinderclient/v3/shell.py
+++ b/cinderclient/v3/shell.py
@@ -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)
diff --git a/cinderclient/v3/volume_transfers.py b/cinderclient/v3/volume_transfers.py
index 39e1a2e..fe790f2 100644
--- a/cinderclient/v3/volume_transfers.py
+++ b/cinderclient/v3/volume_transfers.py
@@ -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.
diff --git a/releasenotes/notes/transfer-sort-ca622e9b8da605c1.yaml b/releasenotes/notes/transfer-sort-ca622e9b8da605c1.yaml
new file mode 100644
index 0000000..5080f97
--- /dev/null
+++ b/releasenotes/notes/transfer-sort-ca622e9b8da605c1.yaml
@@ -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``.