# 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 xspec helpopts 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