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