Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: completion updates for ansible
- X-seq: zsh-workers 51474
- From: Oliver Kiddle <opk@xxxxxxx>
- To: Zsh workers <zsh-workers@xxxxxxx>
- Subject: PATCH: completion updates for ansible
- Date: Thu, 23 Feb 2023 21:00:55 +0100
- Archived-at: <https://zsh.org/workers/51474>
- List-id: <zsh-workers.zsh.org>
It seems that the --vault-id and -e/--extra-vars options can be
repeated. -e can also be followed by @ and a filename which is the only
way I can think of to have vault-encrypted variables but keep the option
of not bothering to provide a vault password and have it just skip those
tasks that need it. Aside from updating the completion to handle these
things, this also covers new options up to ansible 2.13.2 which mostly
affects the ansible-config command which has gained an init action.
Oliver
diff --git a/Completion/Unix/Command/_ansible b/Completion/Unix/Command/_ansible
index 2d976b0a0..7b85a58e4 100644
--- a/Completion/Unix/Command/_ansible
+++ b/Completion/Unix/Command/_ansible
@@ -20,8 +20,10 @@ case $service in
;|
ansible|ansible-console|ansible-playbook|ansible-pull)
args+=(
- '(-K --ask-become-pass)'{-K,--ask-become-pass}'[ask for privilege escalation password]'
- '(-k --ask-pass)'{-k,--ask-pass}'[ask for connection password]'
+ '(-K --ask-become-pass --become-password-file)'{-K,--ask-become-pass}'[ask for privilege escalation password]'
+ '(-K --ask-become-pass)--become-password-file=[specify file containing become password]:file:_files'
+ '(-k --ask-pass --connection-password-file)'{-k,--ask-pass}'[ask for connection password]'
+ '(-k --ask-pass)--connection-password-file=[specify file containing connection password]:file:_files'
'--list-hosts[output list of matching hosts]'
'(-l --limit)'{-l+,--limit=}'[further limit hosts to an additional pattern]:host subset:->hosts'
'(-T --timeout)'{-T+,--timeout=}'[override the connection timeout]:timeout (seconds) [10]'
@@ -49,8 +51,8 @@ case $service in
ansible|ansible-console|ansible-inventory|ansible-playbook|ansible-pull)
args+=(
--ask-vault-pass{,word}'[ask for vault password]'
- '(-e --extra-vars)'{-e+,--extra-vars=}'[set additional variables]:key=value or YAML/JSON'
- '--vault-id=[specify vault identity to use]:vault identity'
+ \*{-e+,--extra-vars=}'[set additional variables]:key=value, YAML/JSON or @file:->extra-vars'
+ '*--vault-id=[specify vault identity to use]:vault identity'
--vault-pass{,word}-file='[specify vault password file]:vault password file:_files'
\*{-i+,--inventory=}'[specify inventory host file or host list]: : _alternative "files\:inventory file\:_files"
"hosts\:host\: _sequence _hosts"'
@@ -86,15 +88,15 @@ case $service in
)
;;
ansible-config)
- args+=(
- '(-c --config)'{-c+,--config=}'[specify configuration file]:config file:_files'
+ args=( -A "-*" $args
'1:action:((
list\:list\ all\ configuration
dump\:show\ the\ current\ settings,\ merge\ specified\ configuration
view\:display\ the\ current\ config\ file
+ init\:create\ initial\ configuration
))'
+ '*::args:->config'
)
- [[ -n $words[(r)dump] ]] && args+=( '--only-changed[only show configuration that is changed from the default]' )
;;
ansible-console)
args+=(
@@ -103,11 +105,11 @@ case $service in
;;
ansible-doc)
args+=(
- '!--metadata-dump' # "internal testing only"
+ '!--metadata-dump' '!--no-fail-on-errors' # "internal use only"
'(-l --list -F --list_files -s --snippet --metadata-dump -e --entry-point)'{-j,--json}'[change output to json format]'
'(-l --list -F --list_files -s --snippet --metadata-dump -e --entry-point)'{-l,--list}'[list available plugins]'
'(-l --list -F --list_files -s --snippet --metadata-dump -e --entry-point)'{-F,--list_files}'[show plugin names and their source files without summaries]'
- '(-l --list -F --list_files -s --snippet --metadata-dump -e --entry-point)'{-s,--snippet}'[show playbook snippet for specified plugins]'
+ '(-l --list -F --list_files -s --snippet --metadata-dump -e --entry-point)'{-s,--snippet}'[show playbook snippet for inventory, lookup and module plugins]'
'(-l --list -F --list_files -s --snippet -e --entry-point)--metadata-dump[dump json metadata for all plugins]'
'(-l --list -F --list_files -s --snippet --metadata-dump -e --entry-point)'{-e+,--entry-point=}'[select the entry point for roles]:entry point'
'(-t --type)'{-t+,--type=}'[choose plugin type]:plugin type [module]:(become cache callback cliconf connection httpapi inventory lookup netconf shell vars module strategy role keyword)'
@@ -218,18 +220,13 @@ case $state in
;;
connect-types)
plug=connection
- ;&
- plugins)
- plugvar=_ansible_${plug}_plugins
- typeset -ga ${plug}
- if zstyle -T ":completion:${curcontext}:plugins" verbose; then
- (( ${(P)#plugvar} )) || set -A ${plugvar} \
- ${${(f)"$(_call_program plugins ansible-doc -t $plug -l)"}/ ##/:}
- _describe -t plugins "${plug} plugin" $plugvar -M 'r:|.=* r:|=*' && ret=0
+ state=plugins
+ ;;
+ extra-vars)
+ if compset -P '@'; then
+ _files -g "*.(json|yml|yaml|ini)(-.)" && ret=0
else
- (( ${(P)#plugvar} )) || set -A ${plugvar} \
- ${${(f)"$(_call_program plugins ansible-doc -t $plug -F)"}%% *}
- _wanted plugins expl "${plug} plugin" compadd -M 'r:|.=* r:|=*' -a $plugvar && ret=0
+ _message 'key=value, YAML/JSON or @file'
fi
;;
tags)
@@ -237,9 +234,39 @@ case $state in
_sequence _wanted tags expl tag compadd - \
${(s.,.)${(j.,.)${(M)${(f)"$(cat **/*.yml)"}:# #tags:*}#*: }} && ret=0
;;
+ config)
+ ign=''
+ curcontext="${curcontext%:*}-${words[1]}:"
+ (( $#words > 3 )) && ign='!'
+ args=(
+ "${ign}(-)"{-h,--help}'[display usage information]'
+ \*{-v,--verbose}'[verbose mode]'
+ '(-c --config)'{-c+,--config=}'[specify configuration file]:config file:_files'
+ '(-t --type)'{-t+,--type=}'[filter down to a specific plugin type]:plugin type [base]:(all base become cache callback cliconf connection httpapi inventory lookup netconf shell vars)'
+ '*:plugin:->plugins'
+ )
+ case $words[1] in
+ dump)
+ args+=(
+ '(--only-changed --changed-only)'{--only-changed,--changed-only}'[only show configuration that is changed from the default]'
+ )
+ ;;
+ init)
+ args+=(
+ '--format=[specify output format for init]:format:(init env vars)'
+ '--disabled[prefix all entries with a comment character]'
+ )
+ ;;
+ esac
+ _arguments -s -S : $args && ret=0
+ plug=${(v)opt_args[(i)-(t|-type)]}
+ [[ $plug = base ]] && state=
+ ;;
galaxy)
ign=''
gactions=( delete import info init install list remove search setup )
+ args=( "${ign}(-)"{-h,--help}'[display usage information]' )
+ (( $#words > 3 )) && ign='!'
case ${(j.:.)line[1,3]} in
(role|collection):*:*)
subcmd="${line[1]}-${line[2]}"
@@ -253,14 +280,11 @@ case $state in
[^:]#)
words=( role "$words[@]" )
(( CURRENT++ ))
+ args=()
;;
esac
curcontext="${curcontext%:*}-${subcmd}:"
- (( $#words > 3 )) && ign='!'
- args=(
- "${ign}(-)"{-h,--help}'[display usage information]'
- '1: :{ _wanted actions expl action compadd -a gactions }'
- )
+ args+=( '1: :{ _wanted actions expl action compadd -a gactions }' )
case $subcmd in
*-*)
args+=(
@@ -403,4 +427,19 @@ case $state in
;;
esac
+if [[ $state = plugins ]]; then
+ [[ -z $plug ]] && return ret
+ plugvar=_ansible_${plug}_plugins
+ typeset -ga ${plug}
+ if zstyle -T ":completion:${curcontext}:plugins" verbose; then
+ (( ${(P)#plugvar} )) || set -A ${plugvar} \
+ ${${(f)"$(_call_program plugins ansible-doc -t $plug -l)"}/ ##/:}
+ _describe -t plugins "${plug} plugin" $plugvar -M 'r:|.=* r:|=*' && ret=0
+ else
+ (( ${(P)#plugvar} )) || set -A ${plugvar} \
+ ${${(f)"$(_call_program plugins ansible-doc -t $plug -F)"}%% *}
+ _wanted plugins expl "${plug} plugin" compadd -M 'r:|.=* r:|=*' -a $plugvar && ret=0
+ fi
+fi
+
return ret
Messages sorted by:
Reverse Date,
Date,
Thread,
Author