#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