Add filters support for volume transfer
Currently ``id`` and ``volume_id`` filters are working correctly for transfer-list command. support for filtering by ``name`` is handled in patch provided in Depends-On. Since filtering by all parameters is supported by API, we can happily add the filters option on the client for volume transfers. Also adds functional test for transfers. Related-Bug: #1860100 Depends-On: https://review.opendev.org/#/c/703658/ Change-Id: I2fd3a6a7b9add65a9a21388df44efb6747065a74
This commit is contained in:
parent
ed8e570e63
commit
8d0d0521c6
cinderclient
releasenotes/notes
@ -156,7 +156,9 @@ class ClientTestBase(base.ClientTestBase):
|
||||
output = self.cinder(cmd, params=params)
|
||||
object = self._get_property_from_output(output)
|
||||
self.addCleanup(self.object_delete, object_name, object['id'])
|
||||
self.wait_for_object_status(object_name, object['id'], 'available')
|
||||
if object_name in ('volume', 'snapshot', 'backup'):
|
||||
self.wait_for_object_status(
|
||||
object_name, object['id'], 'available')
|
||||
return object
|
||||
|
||||
def object_delete(self, object_name, object_id):
|
||||
|
@ -102,3 +102,36 @@ class CinderBackupTests(base.ClientTestBase):
|
||||
self.check_object_deleted('volume', volume['id'])
|
||||
self.object_delete('backup', backup['id'])
|
||||
self.check_object_deleted('backup', backup['id'])
|
||||
|
||||
|
||||
class VolumeTransferTests(base.ClientTestBase):
|
||||
"""Check of base cinder volume transfers command"""
|
||||
|
||||
TRANSFER_PROPERTY = ('created_at', 'volume_id', 'id', 'auth_key', 'name')
|
||||
TRANSFER_SHOW_PROPERTY = ('created_at', 'volume_id', 'id', 'name')
|
||||
|
||||
def test_transfer_create_delete(self):
|
||||
"""Create and delete a volume transfer"""
|
||||
volume = self.object_create('volume', params='1')
|
||||
transfer = self.object_create('transfer', params=volume['id'])
|
||||
self.assert_object_details(self.TRANSFER_PROPERTY, transfer.keys())
|
||||
self.object_delete('transfer', transfer['id'])
|
||||
self.check_object_deleted('transfer', transfer['id'])
|
||||
self.object_delete('volume', volume['id'])
|
||||
self.check_object_deleted('volume', volume['id'])
|
||||
|
||||
def test_transfer_show_delete_by_name(self):
|
||||
"""Show volume transfer by name"""
|
||||
volume = self.object_create('volume', params='1')
|
||||
self.object_create(
|
||||
'transfer',
|
||||
params=('%s --name TEST_TRANSFER_SHOW' % volume['id']))
|
||||
output = self.cinder('transfer-show', params='TEST_TRANSFER_SHOW')
|
||||
transfer = self._get_property_from_output(output)
|
||||
self.assertEqual('TEST_TRANSFER_SHOW', transfer['name'])
|
||||
self.assert_object_details(self.TRANSFER_SHOW_PROPERTY,
|
||||
transfer.keys())
|
||||
self.object_delete('transfer', 'TEST_TRANSFER_SHOW')
|
||||
self.check_object_deleted('transfer', 'TEST_TRANSFER_SHOW')
|
||||
self.object_delete('volume', volume['id'])
|
||||
self.check_object_deleted('volume', volume['id'])
|
||||
|
@ -1560,3 +1560,35 @@ class ShellTest(utils.TestCase):
|
||||
|
||||
for e in expected_commands:
|
||||
self.assertIn(' ' + e, help_text)
|
||||
|
||||
@ddt.data(
|
||||
# testcases for list transfers
|
||||
{'command':
|
||||
'transfer-list --filters volume_id=456',
|
||||
'expected':
|
||||
'/os-volume-transfer/detail?volume_id=456'},
|
||||
{'command':
|
||||
'transfer-list --filters id=123',
|
||||
'expected':
|
||||
'/os-volume-transfer/detail?id=123'},
|
||||
{'command':
|
||||
'transfer-list --filters name=abc',
|
||||
'expected':
|
||||
'/os-volume-transfer/detail?name=abc'},
|
||||
{'command':
|
||||
'transfer-list --filters name=abc --filters volume_id=456',
|
||||
'expected':
|
||||
'/os-volume-transfer/detail?name=abc&volume_id=456'},
|
||||
{'command':
|
||||
'transfer-list --filters id=123 --filters volume_id=456',
|
||||
'expected':
|
||||
'/os-volume-transfer/detail?id=123&volume_id=456'},
|
||||
{'command':
|
||||
'transfer-list --filters id=123 --filters name=abc',
|
||||
'expected':
|
||||
'/os-volume-transfer/detail?id=123&name=abc'},
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_transfer_list_with_filters(self, command, expected):
|
||||
self.run_command('--os-volume-api-version 3.52 %s' % command)
|
||||
self.assert_called('GET', expected)
|
||||
|
@ -2569,12 +2569,22 @@ def do_transfer_create(cs, args):
|
||||
default=None,
|
||||
help='Sort keys and directions in the form of <key>[:<asc|desc>].',
|
||||
start_version='3.59')
|
||||
@utils.arg('--filters',
|
||||
action=AppendFilters,
|
||||
type=six.text_type,
|
||||
nargs='*',
|
||||
start_version='3.52',
|
||||
metavar='<key=value>',
|
||||
default=None,
|
||||
help="Filter key and value pairs.")
|
||||
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,
|
||||
}
|
||||
if AppendFilters.filters:
|
||||
search_opts.update(shell_utils.extract_filters(AppendFilters.filters))
|
||||
|
||||
sort = getattr(args, 'sort', None)
|
||||
if sort:
|
||||
@ -2587,3 +2597,4 @@ def do_transfer_list(cs, args):
|
||||
transfers = cs.transfers.list(search_opts=search_opts, sort=sort)
|
||||
columns = ['ID', 'Volume ID', 'Name']
|
||||
utils.print_list(transfers, columns)
|
||||
AppendFilters.filters = []
|
||||
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
features:
|
||||
- New command option ``--filters`` is added to ``transfer-list``
|
||||
command to support filtering.
|
||||
The ``transfer-list`` command can be used with filters when
|
||||
communicating with the Block Storage API version 3.52 and higher.
|
Loading…
x
Reference in New Issue
Block a user