diff options
Diffstat (limited to 'completions/puppet')
-rw-r--r-- | completions/puppet | 338 |
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 |