#compdef ossh oscp _ossh_known_hosts(){ if [[ -f ~/.ansible/tmp/multi_inventory.cache ]]; then print $(/usr/bin/python -c 'import json,os; z = json.loads(open("%s"%os.path.expanduser("~/.ansible/tmp/multi_inventory.cache")).read()); print "\n".join(["%s.%s" % (host["oo_name"],host["oo_environment"]) for dns, host in z["_meta"]["hostvars"].items()])') fi } _ossh(){ local curcontext="$curcontext" state line typeset -A opt_args common_arguments=( '(- *)'{-h,--help}'[show help]' \ {-v,--verbose}'[enable verbose]' \ {-d,--debug}'[debug mode]' \ {-l,--login_name}+'[login name]:login_name' \ {-c,--command}+'[command to run on remote host]:command' \ {-o,--ssh_opts}+'[SSH Options to pass to SSH]:ssh options' \ {-e,--env}+'[environtment to use]:environment:->env' \ '--list[list out hosts]' \ ':OP Hosts:->oo_hosts' ) case "$service" in ossh) _arguments -C -s \ "$common_arguments[@]" \ ;; oscp) _arguments -C -s \ "$common_arguments[@]" \ {-r,--recurse}'[Recursive copy]' \ ':file:_files' ;; esac case "$state" in oo_hosts) _values 'oo_hosts' $(_ossh_known_hosts) ;; env) _values 'environment' ops int stg prod ;; esac } _ossh "$@"