#compdef rex # zsh completions for 'rex' # initially generated with http://github.com/RobSis/zsh-completion-generator # complete groups, environments, hosts and tasks (default) local curcontext="$curcontext" state state_descr line context ret=1 typeset -A opt_args _hostgroups(){ groups=(${(f)"$(rex -Ty 2>/dev/null| perl -MYAML -e 'my $groups = Load(join "", <>)->{groups}; print "$_\n" for keys %$groups;')"}) _wanted hostgroups expl "available host groups" compadd -a groups } _envs(){ envs=(${(f)"$(rex -Ty 2>/dev/null| perl -MYAML -e 'my $envs = Load(join "", <>)->{envs}; print "$_\n" for @$envs;')"}) _wanted environments expl "available environments" compadd -a envs } # return hosts managed by rex or any other host availabe via zsh's _hosts function _rex_hosts() { rexhosts=(${(f)"$(rex -Ty 2>/dev/null| perl -MYAML -MList::Util=uniq -E 'my $groups = Load(join "", <>)->{groups}; say $_->{name} for uniq sort map { @{ $groups->{$_} } } keys %$groups')"}) _wanted hosts expl "rex managed hosts" compadd -a rexhosts || _hosts } local arguments arguments=( '-b[run batch]' '-e[run the given code fragment]' '-E[execute a task on the given environment]:environments:_envs' '-G[|-g Execute a task on the given server groups]:hosts group:_hostgroups' '-H[execute a task on the given hosts (space delimited)]:host:_rex_hosts' '-z[execute a task on hosts from this commands output]' '-K[public key file for the ssh connection]' '-P[private key file for the ssh connection]' '-p[password for the ssh connection]' '-u[username for the ssh connection]' '-d[show debug output]' '-ddd[show more debug output (includes profiling output)]' '-m[monochrome output: no colors]' '-o[output format]' '-q[quiet mode: no log output]' '-qw[quiet mode: only output warnings and errors]' '-Q[really quiet: output nothing]' '-T[list tasks]' '-Ta[List all tasks, including hidden]' '-Tm[list tasks in machine-readable format]' '-Tv[list tasks verbosely]' '-Ty[list tasks in YAML format]' '-c[turn cache ON]' '-C[turn cache OFF]' '-f[use this file instead of Rexfile]:filename:_files' '-F[force: disregard lock file]' '-h[display this help message]' '-M[load this module instead of Rexfile]' '-O[pass additional options, like CMDB path]' '-s[use sudo for every command]' '-S[password for sudo]' '-t[number of threads to use (aka parallelism param)]' '-v[display (R)?ex version]' '*:options:->vary' ) _arguments -C -s -A "*" $arguments && ret=0 case "$state" in vary) local optsfile optsfile='Rexfile' if [[ -e $optsfile ]]; then tasks=(${(f)"$(rex -Ty 2>/dev/null| perl -MYAML -E 'my $tasks = Load(join "", <>)->{tasks}; say $_ for @$tasks;')"}) _wanted tasks expl "available tasks" compadd -a tasks fi ;; esac return $ret