about summary refs log tree commit diff
path: root/Completion/Unix/Command/_ansible
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_ansible')
-rw-r--r--Completion/Unix/Command/_ansible112
1 files changed, 79 insertions, 33 deletions
diff --git a/Completion/Unix/Command/_ansible b/Completion/Unix/Command/_ansible
index 2d976b0a0..e0d9fb9b6 100644
--- a/Completion/Unix/Command/_ansible
+++ b/Completion/Unix/Command/_ansible
@@ -20,10 +20,11 @@ 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]'
       '(-c --connection)'{-c+,--connection=}'[specify connection type]:connection type [smart]:->connect-types'
       '(-u --user)'{-u+,--user=}'[specify remote user for connection]:remote user:_users'
@@ -42,19 +43,19 @@ case $service in
       '(-f --forks)'{-f+,--forks=}'[specify number of parallel processes to use]:processes [5]'
       '--become-method=[specify privilege escalation method to use]:method [sudo]:(sesu sudo su pbrun pfexec doas dzdo ksu runas pmrun enable machinectl)'
       '--become-user=[specify remote user for running operations]:user:_users'
-      "--syntax-check[perform a syntax check on the playbook, but don't execute it]"
       '!(-R --su-user -U --sudo-user)'{-R,-U,--su-user,--sudo-user}':user [root]:_users'
     )
   ;|
   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"'
       '!(-i --inventory)--inventory-file=:inventory file:_files'
+      '(-l --limit)'{-l+,--limit=}'[further limit hosts to an additional pattern]:host subset:->hosts'
     )
   ;|
   ansible|ansible-console|ansible-inventory)
@@ -68,6 +69,11 @@ case $service in
       "--skip-tags[only run plays and tasks whose tags don't match]"
     )
   ;|
+  ansible-playbook|ansible-console)
+    args+=(
+      '--step[one-step-at-a-time: confirm each task before running]'
+    )
+  ;|
   ansible|ansible-console)
     args+=(
       '--task-timeout[set the task timeout limit]:timeout (seconds)'
@@ -86,31 +92,26 @@ 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
       ))'
-    )
-    [[ -n $words[(r)dump] ]] && args+=( '--only-changed[only show configuration that is changed from the default]' )
-  ;;
-  ansible-console)
-    args+=(
-      '--step[one-step-at-a-time: confirm each task before running]'
+      '*::args:->config'
     )
   ;;
   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)'
+      '(-t --type)'{-t+,--type=}'[choose plugin type]:plugin type [module]:(become cache callback cliconf connection httpapi inventory lookup netconf shell vars module strategy test filter role keyword)'
       '(-r --roles-path)'{-r+,--roles-path=}'[specify directory containing roles]:directory:_directories'
       '*:plugin:->plugins'
     )
@@ -145,6 +146,7 @@ case $service in
       '--list-tags[list all available tags]'
       '--list-tasks[list all tasks that would be executed]'
       '--start-at-task=[start the playbook at specified task]:task'
+      "--syntax-check[perform a syntax check on the playbook, but don't execute it]"
       '--key-file=[specify file to use to authenticate the connection]:private key file:_files'
       '*:playbook:_files -g "(#i)*.y(|a)ml"'
     )
@@ -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,45 @@ 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]'
+          '(-f --format)'{-f+,--format=}'[specify output format]:format:(json yaml display)'
+        )
+      ;;
+      init)
+        args+=(
+          '--format=[specify output format for init]:format:(init env vars)'
+          '--disabled[prefix all entries with a comment character]'
+        )
+      ;;
+      list)
+        args+=(
+          '(-f --format)'{-f+,--format=}'[specify output format]:format:(json yaml)'
+        )
+      ;;
+    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,18 +286,16 @@ 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+=(
           '(-c --ignore-certs)'{-c,--ignore-certs}'[ignore SSL certificate validation errors]'
+          '--timeout=[specify time to wait for operations against the galaxy]:timeout (seconds) [60]'
           '(-s --server)'{-s+,--server=}'[specify API server destination]:server:_hosts'
           --{token,api-key}='[specify ansible galaxy API key]:api key'
           \*{-v,--verbose}'[verbose mode]'
@@ -403,4 +434,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