Add missing all-tenants option to transfer-list
cinder transfer-list is missing the --all-tenants option, which makes it inconsistent with 'cinder list'. Without this fix, when running as admin horizon will need to make multiple queries to cinder (one for each tenant present in the volume list) in order to display the transfers that exist for the volumes being shown. Change-Id: Ic4d72a54c450876ff24c64efd83678062c93a24e Closes-bug: 1351084
This commit is contained in:
parent
9e94d814c6
commit
c01529fa53
|
@ -400,3 +400,11 @@ class ShellTest(utils.TestCase):
|
|||
def test_snapshot_delete_multiple(self):
|
||||
self.run_command('snapshot-delete 1234 5678')
|
||||
self.assert_called('DELETE', '/snapshots/5678')
|
||||
|
||||
def test_list_transfer(self):
|
||||
self.run_command('transfer-list')
|
||||
self.assert_called('GET', '/os-volume-transfer/detail')
|
||||
|
||||
def test_list_transfer_all_tenants(self):
|
||||
self.run_command('transfer-list --all-tenants=1')
|
||||
self.assert_called('GET', '/os-volume-transfer/detail?all_tenants=1')
|
||||
|
|
|
@ -641,3 +641,11 @@ class ShellTest(utils.TestCase):
|
|||
def test_get_pools_detail(self):
|
||||
self.run_command('get-pools --detail')
|
||||
self.assert_called('GET', '/scheduler-stats/get_pools?detail=True')
|
||||
|
||||
def test_list_transfer(self):
|
||||
self.run_command('transfer-list')
|
||||
self.assert_called('GET', '/os-volume-transfer/detail')
|
||||
|
||||
def test_list_transfer_all_tenants(self):
|
||||
self.run_command('transfer-list --all-tenants=1')
|
||||
self.assert_called('GET', '/os-volume-transfer/detail?all_tenants=1')
|
||||
|
|
|
@ -979,10 +979,29 @@ def do_transfer_accept(cs, args):
|
|||
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.service_type('volume')
|
||||
def do_transfer_list(cs, args):
|
||||
"""Lists all transfers."""
|
||||
transfers = cs.transfers.list()
|
||||
all_tenants = int(os.environ.get("ALL_TENANTS", args.all_tenants))
|
||||
search_opts = {
|
||||
'all_tenants': all_tenants,
|
||||
}
|
||||
transfers = cs.transfers.list(search_opts=search_opts)
|
||||
columns = ['ID', 'Volume ID', 'Name']
|
||||
utils.print_list(transfers, columns)
|
||||
|
||||
|
|
|
@ -17,6 +17,11 @@
|
|||
Volume transfer interface (1.1 extension).
|
||||
"""
|
||||
|
||||
try:
|
||||
from urllib import urlencode
|
||||
except ImportError:
|
||||
from urllib.parse import urlencode
|
||||
import six
|
||||
from cinderclient import base
|
||||
|
||||
|
||||
|
@ -69,10 +74,23 @@ class VolumeTransferManager(base.ManagerWithFind):
|
|||
|
||||
:rtype: list of :class:`VolumeTransfer`
|
||||
"""
|
||||
if detailed is True:
|
||||
return self._list("/os-volume-transfer/detail", "transfers")
|
||||
else:
|
||||
return self._list("/os-volume-transfer", "transfers")
|
||||
if search_opts is None:
|
||||
search_opts = {}
|
||||
|
||||
qparams = {}
|
||||
|
||||
for opt, val in six.iteritems(search_opts):
|
||||
if val:
|
||||
qparams[opt] = val
|
||||
|
||||
query_string = "?%s" % urlencode(qparams) if qparams else ""
|
||||
|
||||
detail = ""
|
||||
if detailed:
|
||||
detail = "/detail"
|
||||
|
||||
return self._list("/os-volume-transfer%s%s" % (detail, query_string),
|
||||
"transfers")
|
||||
|
||||
def delete(self, transfer_id):
|
||||
"""Delete a volume transfer.
|
||||
|
|
|
@ -1270,10 +1270,27 @@ def do_transfer_accept(cs, args):
|
|||
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.service_type('volumev2')
|
||||
def do_transfer_list(cs, args):
|
||||
"""Lists all transfers."""
|
||||
transfers = cs.transfers.list()
|
||||
all_tenants = int(os.environ.get("ALL_TENANTS", args.all_tenants))
|
||||
search_opts = {
|
||||
'all_tenants': all_tenants,
|
||||
}
|
||||
transfers = cs.transfers.list(search_opts=search_opts)
|
||||
columns = ['ID', 'Volume ID', 'Name']
|
||||
utils.print_list(transfers, columns)
|
||||
|
||||
|
|
|
@ -17,6 +17,11 @@
|
|||
Volume transfer interface (1.1 extension).
|
||||
"""
|
||||
|
||||
try:
|
||||
from urllib import urlencode
|
||||
except ImportError:
|
||||
from urllib.parse import urlencode
|
||||
import six
|
||||
from cinderclient import base
|
||||
|
||||
|
||||
|
@ -69,10 +74,23 @@ class VolumeTransferManager(base.ManagerWithFind):
|
|||
|
||||
:rtype: list of :class:`VolumeTransfer`
|
||||
"""
|
||||
if detailed is True:
|
||||
return self._list("/os-volume-transfer/detail", "transfers")
|
||||
else:
|
||||
return self._list("/os-volume-transfer", "transfers")
|
||||
if search_opts is None:
|
||||
search_opts = {}
|
||||
|
||||
qparams = {}
|
||||
|
||||
for opt, val in six.iteritems(search_opts):
|
||||
if val:
|
||||
qparams[opt] = val
|
||||
|
||||
query_string = "?%s" % urlencode(qparams) if qparams else ""
|
||||
|
||||
detail = ""
|
||||
if detailed:
|
||||
detail = "/detail"
|
||||
|
||||
return self._list("/os-volume-transfer%s%s" % (detail, query_string),
|
||||
"transfers")
|
||||
|
||||
def delete(self, transfer_id):
|
||||
"""Delete a volume transfer.
|
||||
|
|
Loading…
Reference in New Issue