summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-01-15 11:48:04 +0000
committerGerrit Code Review <review@openstack.org>2014-01-15 11:48:04 +0000
commitc634f71b22b52f9030c0b42419b97535fdee5c90 (patch)
treec1dff968d5b7d12755db16f6038494d3dcf5f5da
parent25887daa885e32de8524437edaff373de43fad95 (diff)
parent5b19eae864c6a13247b6fcb72462d7828e2c5a60 (diff)
downloadpython-ceilometerclient-c634f71b22b52f9030c0b42419b97535fdee5c90.tar.gz
Merge "Supports bash_completion for ceilometerclient"
-rw-r--r--ceilometerclient/shell.py29
-rw-r--r--tools/ceilometer.bash_completion27
2 files changed, 56 insertions, 0 deletions
diff --git a/ceilometerclient/shell.py b/ceilometerclient/shell.py
index 8b8b0c9..57cb604 100644
--- a/ceilometerclient/shell.py
+++ b/ceilometerclient/shell.py
@@ -186,9 +186,19 @@ class CeilometerShell(object):
submodule = utils.import_versioned_module(version, 'shell')
self._find_actions(subparsers, submodule)
self._find_actions(subparsers, self)
+ self._add_bash_completion_subparser(subparsers)
return parser
+ def _add_bash_completion_subparser(self, subparsers):
+ subparser = subparsers.add_parser(
+ 'bash_completion',
+ add_help=False,
+ formatter_class=HelpFormatter
+ )
+ self.subcommands['bash_completion'] = subparser
+ subparser.set_defaults(func=self.do_bash_completion)
+
def _find_actions(self, subparsers, actions_module):
for attr in (a for a in dir(actions_module) if a.startswith('do_')):
# I prefer to be hypen-separated instead of underscores.
@@ -241,6 +251,9 @@ class CeilometerShell(object):
if args.func == self.do_help:
self.do_help(args)
return 0
+ elif args.func == self.do_bash_completion:
+ self.do_bash_completion(args)
+ return 0
if not (args.os_auth_token and args.ceilometer_url):
if not args.os_username:
@@ -270,6 +283,22 @@ class CeilometerShell(object):
except exc.Unauthorized:
raise exc.CommandError("Invalid OpenStack Identity credentials.")
+ def do_bash_completion(self, args):
+ """Prints all of the commands and options to stdout.
+
+ The ceilometer.bash_completion script doesn't have to hard code them.
+ """
+ commands = set()
+ options = set()
+ for sc_str, sc in self.subcommands.items():
+ commands.add(sc_str)
+ for option in list(sc._optionals._option_string_actions):
+ options.add(option)
+
+ commands.remove('bash-completion')
+ commands.remove('bash_completion')
+ print(' '.join(commands | options))
+
@utils.arg('command', metavar='<subcommand>', nargs='?',
help='Display help for <subcommand>')
def do_help(self, args):
diff --git a/tools/ceilometer.bash_completion b/tools/ceilometer.bash_completion
new file mode 100644
index 0000000..b2b48b2
--- /dev/null
+++ b/tools/ceilometer.bash_completion
@@ -0,0 +1,27 @@
+# bash completion for openstack ceilometer
+
+_ceilometer_opts="" # lazy init
+_ceilometer_flags="" # lazy init
+_ceilometer_opts_exp="" # lazy init
+_ceilometer()
+{
+ local cur prev kbc
+ COMPREPLY=()
+ cur="${COMP_WORDS[COMP_CWORD]}"
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
+
+ if [ "x$_ceilometer_opts" == "x" ] ; then
+ kbc="`ceilometer bash-completion | sed -e "s/ -h / /"`"
+ _ceilometer_opts="`echo "$kbc" | sed -e "s/--[a-z0-9_-]*//g" -e "s/[ ][ ]*/ /g"`"
+ _ceilometer_flags="`echo " $kbc" | sed -e "s/ [^-][^-][a-z0-9_-]*//g" -e "s/[ ][ ]*/ /g"`"
+ _ceilometer_opts_exp="`echo $_ceilometer_opts | sed -e "s/[ ]/|/g"`"
+ fi
+
+ if [[ " ${COMP_WORDS[@]} " =~ " "($_ceilometer_opts_exp)" " && "$prev" != "help" ]] ; then
+ COMPREPLY=($(compgen -W "${_ceilometer_flags}" -- ${cur}))
+ else
+ COMPREPLY=($(compgen -W "${_ceilometer_opts}" -- ${cur}))
+ fi
+ return 0
+}
+complete -F _ceilometer ceilometer