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:
@@ -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')
|
||||
|
@@ -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)
|
||||
|
@@ -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.
|
||||
|
Reference in New Issue
Block a user