summaryrefslogtreecommitdiff
path: root/novaclient/shell.py
diff options
context:
space:
mode:
Diffstat (limited to 'novaclient/shell.py')
-rw-r--r--novaclient/shell.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/novaclient/shell.py b/novaclient/shell.py
index a5d1e937..22952b7c 100644
--- a/novaclient/shell.py
+++ b/novaclient/shell.py
@@ -442,6 +442,7 @@ class OpenStackComputeShell(object):
action_help = desc.strip()
arguments = getattr(callback, 'arguments', [])
+ groups = {}
subparser = subparsers.add_parser(
command,
@@ -456,10 +457,14 @@ class OpenStackComputeShell(object):
)
self.subcommands[command] = subparser
for (args, kwargs) in arguments:
- start_version = kwargs.get("start_version", None)
+ kwargs = kwargs.copy()
+
+ start_version = kwargs.pop("start_version", None)
+ end_version = kwargs.pop("end_version", None)
+ group = kwargs.pop("group", None)
+
if start_version:
start_version = api_versions.APIVersion(start_version)
- end_version = kwargs.get("end_version", None)
if end_version:
end_version = api_versions.APIVersion(end_version)
else:
@@ -471,10 +476,16 @@ class OpenStackComputeShell(object):
"end": end_version.get_string()})
if not version.matches(start_version, end_version):
continue
- kw = kwargs.copy()
- kw.pop("start_version", None)
- kw.pop("end_version", None)
- subparser.add_argument(*args, **kw)
+
+ if group:
+ if group not in groups:
+ groups[group] = (
+ subparser.add_mutually_exclusive_group()
+ )
+ kwargs['dest'] = kwargs.get('dest', group)
+ groups[group].add_argument(*args, **kwargs)
+ else:
+ subparser.add_argument(*args, **kwargs)
subparser.set_defaults(func=callback)
def setup_debugging(self, debug):