Add support '--all-tenants' for cinder backup-list

Also added support '--name', '--status', '--volume-id' arguments
for cinder backup-list.

DocImpact
Closes-Bug: #1422046
Depends On: I73f6377c7d6fd92d0464d13f9c8dd6682fef78e3
Change-Id: I5f2ab6370a8333a9ee498c6158037b0433f36a23
This commit is contained in:
Yuriy Nesenenko
2015-07-30 16:57:39 +03:00
parent bae0bb3276
commit 8cc3ee2782
3 changed files with 79 additions and 6 deletions

View File

@@ -947,3 +947,35 @@ class ShellTest(utils.TestCase):
expected = {"os-unset_image_metadata": {"key": "key1"}}
self.assert_called('POST', '/volumes/1234/action',
body=expected)
def _get_params_from_stack(self, pos=-1):
method, url = self.shell.cs.client.callstack[pos][0:2]
path, query = parse.splitquery(url)
params = parse.parse_qs(query)
return path, params
def test_backup_list_all_tenants(self):
self.run_command('backup-list --all-tenants=1 --name=bc '
'--status=available --volume-id=1234')
expected = {
'all_tenants': ['1'],
'name': ['bc'],
'status': ['available'],
'volume_id': ['1234'],
}
path, params = self._get_params_from_stack()
self.assertEqual('/backups/detail', path)
self.assertEqual(4, len(params))
for k in params.keys():
self.assertEqual(expected[k], params[k])
def test_backup_list_volume_id(self):
self.run_command('backup-list --volume-id=1234')
self.assert_called('GET', '/backups/detail?volume_id=1234')
def test_backup_list(self):
self.run_command('backup-list')
self.assert_called('GET', '/backups/detail')

View File

@@ -1229,10 +1229,45 @@ def do_backup_show(cs, args):
utils.print_dict(info)
@utils.arg('--all-tenants',
metavar='<all_tenants>',
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('--name',
metavar='<name>',
default=None,
help='Filters results by a name. Default=None.')
@utils.arg('--status',
metavar='<status>',
default=None,
help='Filters results by a status. Default=None.')
@utils.arg('--volume-id',
metavar='<volume-id>',
default=None,
help='Filters results by a volume ID. Default=None.')
@utils.arg('--volume_id',
help=argparse.SUPPRESS)
@utils.service_type('volumev2')
def do_backup_list(cs, args):
"""Lists all backups."""
backups = cs.backups.list()
search_opts = {
'all_tenants': args.all_tenants,
'name': args.name,
'status': args.status,
'volume_id': args.volume_id,
}
backups = cs.backups.list(search_opts=search_opts)
_translate_volume_snapshot_keys(backups)
columns = ['ID', 'Volume ID', 'Status', 'Name', 'Size', 'Object Count',
'Container']
utils.print_list(backups, columns)

View File

@@ -16,7 +16,7 @@
"""
Volume Backups interface (1.1 extension).
"""
from six.moves.urllib.parse import urlencode
from cinderclient import base
@@ -68,10 +68,16 @@ class VolumeBackupManager(base.ManagerWithFind):
:rtype: list of :class:`VolumeBackup`
"""
if detailed is True:
return self._list("/backups/detail", "backups")
else:
return self._list("/backups", "backups")
search_opts = search_opts or {}
qparams = dict((key, val) for key, val in search_opts.items() if val)
query_string = ("?%s" % urlencode(qparams)) if qparams else ""
detail = '/detail' if detailed else ''
return self._list("/backups%s%s" % (detail, query_string),
"backups")
def delete(self, backup):
"""Delete a volume backup.