summaryrefslogtreecommitdiffstats
path: root/completions/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'completions/puppet')
-rw-r--r--completions/puppet338
1 files changed, 338 insertions, 0 deletions
diff --git a/completions/puppet b/completions/puppet
new file mode 100644
index 0000000..e8767de
--- /dev/null
+++ b/completions/puppet
@@ -0,0 +1,338 @@
+# bash completion for puppet -*- shell-script -*-
+
+_puppet_logdest()
+{
+ if [[ -z $cur ]]; then
+ COMPREPLY=($(compgen -W 'syslog console /' -- "$cur"))
+ else
+ COMPREPLY=($(compgen -W 'syslog console' -- "$cur"))
+ _filedir
+ fi
+}
+
+_puppet_digest()
+{
+ COMPREPLY=($(compgen -W 'MD5 MD2 SHA1 SHA256' -- "$cur"))
+}
+
+_puppet_certs()
+{
+ local puppetca="puppet cert"
+ PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type puppetca &>/dev/null &&
+ puppetca=puppetca
+
+ if [[ $1 == --all ]]; then
+ cert_list=$($puppetca --list --all | command sed -e 's/^[+-]\{0,1\}\s*\(\S\+\)\s\+.*$/\1/')
+ else
+ cert_list=$($puppetca --list)
+ fi
+ COMPREPLY+=($(compgen -W "$cert_list" -- "$cur"))
+}
+
+_puppet_types()
+{
+ puppet_types=$(puppet describe --list | command sed -e 's/^\(\S\{1,\}\).*$/\1/')
+ COMPREPLY+=($(compgen -W "$puppet_types" -- "$cur"))
+}
+
+_puppet_references()
+{
+ local puppetdoc="puppet doc"
+ PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type puppetdoc &>/dev/null &&
+ puppetdoc=puppetdoc
+
+ puppet_doc_list=$($puppetdoc --list | command sed -e 's/^\(\S\{1,\}\).*$/\1/')
+ COMPREPLY+=($(compgen -W "$puppet_doc_list" -- "$cur"))
+}
+
+_puppet_subcmd_opts()
+{
+ # puppet cmd help is somewhat slow, avoid if possible
+ [[ -z $cur || $cur == -* ]] &&
+ COMPREPLY+=($(compgen -W \
+ '$(_parse_usage "$1" "help $2")' -- "$cur"))
+}
+
+_puppet()
+{
+ local cur prev words cword
+ _init_completion || return
+
+ local subcommand action
+
+ case $prev in
+ -h | --help | -V | --version)
+ return
+ ;;
+ esac
+
+ case ${words[0]} in
+ puppetmasterd)
+ subcommand=master
+ ;;
+ puppetd)
+ subcommand=agent
+ ;;
+ puppetca)
+ subcommand=cert
+ ;;
+ ralsh)
+ subcommand=resource
+ ;;
+ puppetrun)
+ subcommand=kick
+ ;;
+ puppetqd)
+ subcommand=queue
+ ;;
+ filebucket)
+ subcommand=filebucket
+ ;;
+ puppetdoc)
+ subcommand=doc
+ ;;
+ pi)
+ subcommand=describe
+ ;;
+ puppet)
+ case ${words[1]} in
+ agent | apply | cert | describe | doc | filebucket | kick | master | parser | queue | resource)
+ subcommand=${words[1]}
+ ;;
+ *.pp | *.rb)
+ subcommand=apply
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'agent apply cert describe doc
+ filebucket kick master parser queue resource' \
+ -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ esac
+
+ case $subcommand in
+ agent)
+ case $prev in
+ --certname)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ --digest)
+ _puppet_digest
+ return
+ ;;
+ --fqdn)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -l | --logdest)
+ _puppet_logdest
+ return
+ ;;
+ --masterport)
+ COMPREPLY=($(compgen -W '8140' -- "$cur"))
+ return
+ ;;
+ -w | --waitforcert)
+ COMPREPLY=($(compgen -W '0 15 30 60 120' -- "$cur"))
+ return
+ ;;
+ *)
+ _puppet_subcmd_opts "$1" $subcommand
+ # _parse_usage doesn't grok [-D|--daemonize|--no-daemonize]
+ COMPREPLY+=($(compgen -W '--no-daemonize' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ apply)
+ case $prev in
+ --catalog)
+ COMPREPLY=($(compgen -W '-' -- "$cur"))
+ _filedir json
+ return
+ ;;
+ --execute)
+ return
+ ;;
+ -l | --logdest)
+ _puppet_logdest
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ _filedir
+ fi
+ return
+ ;;
+ esac
+ ;;
+ cert)
+ case $prev in
+ --digest)
+ _puppet_digest
+ return
+ ;;
+ *)
+ action=$prev
+ COMPREPLY=($(compgen -W '--digest --debug --help --verbose --version' \
+ -- "$cur"))
+ case $action in
+ fingerprint | list | verify | --fingerprint | --list | --verify)
+ COMPREPLY+=($(compgen -W '--all' -- "$cur"))
+ _puppet_certs --all
+ return
+ ;;
+ generate | --generate)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ clean | print | revoke | --clean | --print | --revoke)
+ _puppet_certs --all
+ return
+ ;;
+ sign | --sign)
+ COMPREPLY+=($(compgen -W '--all' -- "$cur"))
+ _puppet_certs
+ return
+ ;;
+ *)
+ COMPREPLY+=($(compgen -W 'clean fingerprint generate
+ list print revoke sign verify reinventory' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ describe)
+ _puppet_subcmd_opts "$1" $subcommand
+ if [[ $cur != -* ]]; then
+ _puppet_types
+ fi
+ return
+ ;;
+ doc)
+ case $prev in
+ -o | --outputdir)
+ _filedir -d
+ return
+ ;;
+ -m | --mode)
+ COMPREPLY=($(compgen -W 'text trac pdf rdoc' -- "$cur"))
+ return
+ ;;
+ -r | --reference)
+ _puppet_references
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ _filedir
+ fi
+ return
+ ;;
+ esac
+ ;;
+ filebucket)
+ case $prev in
+ -s | --server)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -b | --bucket)
+ _filedir -d
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ COMPREPLY=($(compgen -W 'backup get restore' \
+ -- "$cur"))
+ _filedir
+ fi
+ return
+ ;;
+ esac
+ ;;
+ kick)
+ case $prev in
+ -c | --class)
+ return
+ ;;
+ --host)
+ _known_hosts_real -- "$cur"
+ return
+ ;;
+ -t | --tag)
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ _known_hosts_real -- "$cur"
+ fi
+ return
+ ;;
+ esac
+ ;;
+ master)
+ case $prev in
+ -l | --logdest)
+ _puppet_logdest
+ return
+ ;;
+ *)
+ _puppet_subcmd_opts "$1" $subcommand
+ # _parse_usage doesn't grok [-D|--daemonize|--no-daemonize]
+ COMPREPLY+=($(compgen -W '--no-daemonize' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ parser)
+ action=$prev
+ case $action in
+ validate)
+ _filedir pp
+ return
+ ;;
+ *)
+ COMPREPLY=($(compgen -W 'validate' -- "$cur"))
+ return
+ ;;
+ esac
+ ;;
+ queue)
+ case $prev in
+ -l | --logdest)
+ _puppet_logdest
+ return
+ ;;
+ *)
+ if [[ $cur == -* ]]; then
+ _puppet_subcmd_opts "$1" $subcommand
+ else
+ _filedir
+ fi
+ return
+ ;;
+ esac
+ ;;
+ resource | *)
+ _puppet_subcmd_opts "$1" $subcommand
+ return
+ ;;
+ esac
+} &&
+ complete -F _puppet puppetmasterd puppetd puppetca ralsh puppetrun puppetqd filebucket puppetdoc puppet
+
+# ex: filetype=sh