zsh-workers
 help / color / mirror / code / Atom feed
* PATCH: completion updates for ansible
@ 2023-02-23 20:00 Oliver Kiddle
  0 siblings, 0 replies; only message in thread
From: Oliver Kiddle @ 2023-02-23 20:00 UTC (permalink / raw)
  To: Zsh workers

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


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-02-23 20:02 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-02-23 20:00 PATCH: completion updates for ansible Oliver Kiddle

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).