Merge "cinderclient accepts arguments after metadata without -- separator"
This commit is contained in:
commit
7c68f6f6df
cinderclient
@ -514,6 +514,28 @@ class OpenStackCinderShell(object):
|
||||
ks_logger = logging.getLogger("keystoneclient")
|
||||
ks_logger.setLevel(logging.DEBUG)
|
||||
|
||||
def _delimit_metadata_args(self, argv):
|
||||
"""This function adds -- separator at the appropriate spot
|
||||
"""
|
||||
word = '--metadata'
|
||||
tmp = []
|
||||
# flag is true in between metadata option and next option
|
||||
metadata_options = False
|
||||
if word in argv:
|
||||
for arg in argv:
|
||||
if arg == word:
|
||||
metadata_options = True
|
||||
elif metadata_options:
|
||||
if arg.startswith('--'):
|
||||
metadata_options = False
|
||||
elif '=' not in arg:
|
||||
tmp.append(u'--')
|
||||
metadata_options = False
|
||||
tmp.append(arg)
|
||||
return tmp
|
||||
else:
|
||||
return argv
|
||||
|
||||
def main(self, argv):
|
||||
# Parse args once to find version and debug settings
|
||||
parser = self.get_base_parser()
|
||||
@ -542,6 +564,7 @@ class OpenStackCinderShell(object):
|
||||
subcommand_parser.print_help()
|
||||
return 0
|
||||
|
||||
argv = self._delimit_metadata_args(argv)
|
||||
args = subcommand_parser.parse_args(argv)
|
||||
self._run_extension_hooks('__post_parse_args__', args)
|
||||
|
||||
|
@ -112,6 +112,75 @@ class ShellTest(utils.TestCase):
|
||||
# NOTE(jdg): we default to detail currently
|
||||
self.assert_called('GET', '/volumes/detail')
|
||||
|
||||
def test_metadata_args_with_limiter(self):
|
||||
self.run_command('create --metadata key1="--test1" 1')
|
||||
expected = {'volume': {'snapshot_id': None,
|
||||
'display_description': None,
|
||||
'source_volid': None,
|
||||
'status': 'creating',
|
||||
'size': 1,
|
||||
'volume_type': None,
|
||||
'imageRef': None,
|
||||
'availability_zone': None,
|
||||
'attach_status': 'detached',
|
||||
'user_id': None,
|
||||
'project_id': None,
|
||||
'metadata': {'key1': '"--test1"'},
|
||||
'display_name': None}}
|
||||
self.assert_called_anytime('POST', '/volumes', expected)
|
||||
|
||||
def test_metadata_args_limiter_display_name(self):
|
||||
self.run_command('create --metadata key1="--t1" --display-name="t" 1')
|
||||
expected = {'volume': {'snapshot_id': None,
|
||||
'display_description': None,
|
||||
'source_volid': None,
|
||||
'status': 'creating',
|
||||
'size': 1,
|
||||
'volume_type': None,
|
||||
'imageRef': None,
|
||||
'availability_zone': None,
|
||||
'attach_status': 'detached',
|
||||
'user_id': None,
|
||||
'project_id': None,
|
||||
'metadata': {'key1': '"--t1"'},
|
||||
'display_name': '"t"'}}
|
||||
self.assert_called_anytime('POST', '/volumes', expected)
|
||||
|
||||
def test_delimit_metadata_args(self):
|
||||
self.run_command('create --metadata key1="test1" key2="test2" 1')
|
||||
expected = {'volume': {'snapshot_id': None,
|
||||
'display_description': None,
|
||||
'source_volid': None,
|
||||
'status': 'creating',
|
||||
'size': 1,
|
||||
'volume_type': None,
|
||||
'imageRef': None,
|
||||
'availability_zone': None,
|
||||
'attach_status': 'detached',
|
||||
'user_id': None,
|
||||
'project_id': None,
|
||||
'metadata': {'key1': '"test1"',
|
||||
'key2': '"test2"'},
|
||||
'display_name': None}}
|
||||
self.assert_called_anytime('POST', '/volumes', expected)
|
||||
|
||||
def test_delimit_metadata_args_display_name(self):
|
||||
self.run_command('create --metadata key1="t1" --display-name="t" 1')
|
||||
expected = {'volume': {'snapshot_id': None,
|
||||
'display_description': None,
|
||||
'source_volid': None,
|
||||
'status': 'creating',
|
||||
'size': 1,
|
||||
'volume_type': None,
|
||||
'imageRef': None,
|
||||
'availability_zone': None,
|
||||
'attach_status': 'detached',
|
||||
'user_id': None,
|
||||
'project_id': None,
|
||||
'metadata': {'key1': '"t1"'},
|
||||
'display_name': '"t"'}}
|
||||
self.assert_called_anytime('POST', '/volumes', expected)
|
||||
|
||||
def test_list_filter_status(self):
|
||||
self.run_command('list --status=available')
|
||||
self.assert_called('GET', '/volumes/detail?status=available')
|
||||
|
@ -85,6 +85,86 @@ class ShellTest(utils.TestCase):
|
||||
# NOTE(jdg): we default to detail currently
|
||||
self.assert_called('GET', '/volumes/detail')
|
||||
|
||||
def test_metadata_args_with_limiter(self):
|
||||
self.run_command('create --metadata key1="--test1" 1')
|
||||
self.assert_called('GET', '/volumes/1234')
|
||||
expected = {'volume': {'imageRef': None,
|
||||
'project_id': None,
|
||||
'status': 'creating',
|
||||
'size': 1,
|
||||
'user_id': None,
|
||||
'availability_zone': None,
|
||||
'source_replica': None,
|
||||
'attach_status': 'detached',
|
||||
'source_volid': None,
|
||||
'consistencygroup_id': None,
|
||||
'name': None,
|
||||
'snapshot_id': None,
|
||||
'metadata': {'key1': '"--test1"'},
|
||||
'volume_type': None,
|
||||
'description': None}}
|
||||
self.assert_called_anytime('POST', '/volumes', expected)
|
||||
|
||||
def test_metadata_args_limiter_display_name(self):
|
||||
self.run_command('create --metadata key1="--t1" --name="t" 1')
|
||||
self.assert_called('GET', '/volumes/1234')
|
||||
expected = {'volume': {'imageRef': None,
|
||||
'project_id': None,
|
||||
'status': 'creating',
|
||||
'size': 1,
|
||||
'user_id': None,
|
||||
'availability_zone': None,
|
||||
'source_replica': None,
|
||||
'attach_status': 'detached',
|
||||
'source_volid': None,
|
||||
'consistencygroup_id': None,
|
||||
'name': '"t"',
|
||||
'snapshot_id': None,
|
||||
'metadata': {'key1': '"--t1"'},
|
||||
'volume_type': None,
|
||||
'description': None}}
|
||||
self.assert_called_anytime('POST', '/volumes', expected)
|
||||
|
||||
def test_delimit_metadata_args(self):
|
||||
self.run_command('create --metadata key1="test1" key2="test2" 1')
|
||||
expected = {'volume': {'imageRef': None,
|
||||
'project_id': None,
|
||||
'status': 'creating',
|
||||
'size': 1,
|
||||
'user_id': None,
|
||||
'availability_zone': None,
|
||||
'source_replica': None,
|
||||
'attach_status': 'detached',
|
||||
'source_volid': None,
|
||||
'consistencygroup_id': None,
|
||||
'name': None,
|
||||
'snapshot_id': None,
|
||||
'metadata': {'key1': '"test1"',
|
||||
'key2': '"test2"'},
|
||||
'volume_type': None,
|
||||
'description': None}}
|
||||
self.assert_called_anytime('POST', '/volumes', expected)
|
||||
|
||||
def test_delimit_metadata_args_display_name(self):
|
||||
self.run_command('create --metadata key1="t1" --name="t" 1')
|
||||
self.assert_called('GET', '/volumes/1234')
|
||||
expected = {'volume': {'imageRef': None,
|
||||
'project_id': None,
|
||||
'status': 'creating',
|
||||
'size': 1,
|
||||
'user_id': None,
|
||||
'availability_zone': None,
|
||||
'source_replica': None,
|
||||
'attach_status': 'detached',
|
||||
'source_volid': None,
|
||||
'consistencygroup_id': None,
|
||||
'name': '"t"',
|
||||
'snapshot_id': None,
|
||||
'metadata': {'key1': '"t1"'},
|
||||
'volume_type': None,
|
||||
'description': None}}
|
||||
self.assert_called_anytime('POST', '/volumes', expected)
|
||||
|
||||
def test_list_filter_status(self):
|
||||
self.run_command('list --status=available')
|
||||
self.assert_called('GET', '/volumes/detail?status=available')
|
||||
|
Loading…
x
Reference in New Issue
Block a user