Skip to content

Commit

Permalink
Merge "cinderclient accepts arguments after metadata without -- separ…
Browse files Browse the repository at this point in the history
…ator"
  • Loading branch information
Jenkins authored and openstack-gerrit committed Mar 16, 2015
2 parents f47f973 + 57c9bf1 commit 7c68f6f
Show file tree
Hide file tree
Showing 3 changed files with 172 additions and 0 deletions.
23 changes: 23 additions & 0 deletions cinderclient/shell.py
Expand Up @@ -514,6 +514,28 @@ def setup_debugging(self, debug):
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()
Expand Down Expand Up @@ -542,6 +564,7 @@ def main(self, argv):
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)

Expand Down
69 changes: 69 additions & 0 deletions cinderclient/tests/v1/test_shell.py
Expand Up @@ -112,6 +112,75 @@ def test_list(self):
# 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')
Expand Down
80 changes: 80 additions & 0 deletions cinderclient/tests/v2/test_shell.py
Expand Up @@ -85,6 +85,86 @@ def test_list(self):
# 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')
Expand Down

0 comments on commit 7c68f6f

Please sign in to comment.