unsupported
     ˆ¿Æƒh¹¾Ä      
  #   ˆl–Ü4ý(&ÔËm
�ÆŸ¸ÓêbÑ¿Ç„ ÿ¿Å '    # 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
       