github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/contrib/completion/zsh/_docker (about) 1 #compdef docker dockerd 2 # 3 # zsh completion for docker (http://docker.com) 4 # 5 # version: 0.3.0 6 # github: https://github.com/felixr/docker-zsh-completion 7 # 8 # contributors: 9 # - Felix Riedel 10 # - Steve Durrheimer 11 # - Vincent Bernat 12 # 13 # license: 14 # 15 # Copyright (c) 2013, Felix Riedel 16 # All rights reserved. 17 # 18 # Redistribution and use in source and binary forms, with or without 19 # modification, are permitted provided that the following conditions are met: 20 # * Redistributions of source code must retain the above copyright 21 # notice, this list of conditions and the following disclaimer. 22 # * Redistributions in binary form must reproduce the above copyright 23 # notice, this list of conditions and the following disclaimer in the 24 # documentation and/or other materials provided with the distribution. 25 # * Neither the name of the <organization> nor the 26 # names of its contributors may be used to endorse or promote products 27 # derived from this software without specific prior written permission. 28 # 29 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 30 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 31 # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 32 # DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY 33 # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 34 # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 35 # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 36 # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 37 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 38 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 39 # 40 41 # Short-option stacking can be enabled with: 42 # zstyle ':completion:*:*:docker:*' option-stacking yes 43 # zstyle ':completion:*:*:docker-*:*' option-stacking yes 44 __docker_arguments() { 45 if zstyle -t ":completion:${curcontext}:" option-stacking; then 46 print -- -s 47 fi 48 } 49 50 __docker_get_containers() { 51 [[ $PREFIX = -* ]] && return 1 52 integer ret=1 53 local kind type line s 54 declare -a running stopped lines args names 55 56 kind=$1; shift 57 type=$1; shift 58 [[ $kind = (stopped|all) ]] && args=($args -a) 59 60 lines=(${(f)${:-"$(_call_program commands docker $docker_options ps --format 'table' --no-trunc $args)"$'\n'}}) 61 62 # Parse header line to find columns 63 local i=1 j=1 k header=${lines[1]} 64 declare -A begin end 65 while (( j < ${#header} - 1 )); do 66 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 67 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 68 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 69 begin[${header[$i,$((j-1))]}]=$i 70 end[${header[$i,$((j-1))]}]=$k 71 done 72 end[${header[$i,$((j-1))]}]=-1 # Last column, should go to the end of the line 73 lines=(${lines[2,-1]}) 74 75 # Container ID 76 if [[ $type = (ids|all) ]]; then 77 for line in $lines; do 78 s="${${line[${begin[CONTAINER ID]},${end[CONTAINER ID]}]%% ##}[0,12]}" 79 s="$s:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}" 80 s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}" 81 if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = (Exit*|Created*) ]]; then 82 stopped=($stopped $s) 83 else 84 running=($running $s) 85 fi 86 done 87 fi 88 89 # Names: we only display the one without slash. All other names 90 # are generated and may clutter the completion. However, with 91 # Swarm, all names may be prefixed by the swarm node name. 92 if [[ $type = (names|all) ]]; then 93 for line in $lines; do 94 names=(${(ps:,:)${${line[${begin[NAMES]},${end[NAMES]}]}%% *}}) 95 # First step: find a common prefix and strip it (swarm node case) 96 (( ${#${(u)names%%/*}} == 1 )) && names=${names#${names[1]%%/*}/} 97 # Second step: only keep the first name without a / 98 s=${${names:#*/*}[1]} 99 # If no name, well give up. 100 (( $#s != 0 )) || continue 101 s="$s:${(l:15:: :::)${${line[${begin[CREATED]},${end[CREATED]}]/ ago/}%% ##}}" 102 s="$s, ${${${line[${begin[IMAGE]},${end[IMAGE]}]}/:/\\:}%% ##}" 103 if [[ ${line[${begin[STATUS]},${end[STATUS]}]} = (Exit*|Created*) ]]; then 104 stopped=($stopped $s) 105 else 106 running=($running $s) 107 fi 108 done 109 fi 110 111 [[ $kind = (running|all) ]] && _describe -t containers-running "running containers" running "$@" && ret=0 112 [[ $kind = (stopped|all) ]] && _describe -t containers-stopped "stopped containers" stopped "$@" && ret=0 113 return ret 114 } 115 116 __docker_complete_stopped_containers() { 117 [[ $PREFIX = -* ]] && return 1 118 __docker_get_containers stopped all "$@" 119 } 120 121 __docker_complete_running_containers() { 122 [[ $PREFIX = -* ]] && return 1 123 __docker_get_containers running all "$@" 124 } 125 126 __docker_complete_containers() { 127 [[ $PREFIX = -* ]] && return 1 128 __docker_get_containers all all "$@" 129 } 130 131 __docker_complete_containers_ids() { 132 [[ $PREFIX = -* ]] && return 1 133 __docker_get_containers all ids "$@" 134 } 135 136 __docker_complete_containers_names() { 137 [[ $PREFIX = -* ]] && return 1 138 __docker_get_containers all names "$@" 139 } 140 141 __docker_complete_info_plugins() { 142 [[ $PREFIX = -* ]] && return 1 143 integer ret=1 144 emulate -L zsh 145 setopt extendedglob 146 local -a plugins 147 plugins=(${(ps: :)${(M)${(f)${${"$(_call_program commands docker $docker_options info)"##*$'\n'Plugins:}%%$'\n'^ *}}:# $1: *}## $1: }) 148 _describe -t plugins "$1 plugins" plugins && ret=0 149 return ret 150 } 151 152 __docker_complete_images() { 153 [[ $PREFIX = -* ]] && return 1 154 integer ret=1 155 declare -a images 156 images=(${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}[2,-1]}/(#b)([^ ]##) ##([^ ]##) ##([^ ]##)*/${match[3]}:${(r:15:: :::)match[2]} in ${match[1]}}) 157 _describe -t docker-images "images" images && ret=0 158 __docker_complete_repositories_with_tags && ret=0 159 return ret 160 } 161 162 __docker_complete_repositories() { 163 [[ $PREFIX = -* ]] && return 1 164 integer ret=1 165 declare -a repos 166 repos=(${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}%% *}[2,-1]}) 167 repos=(${repos#<none>}) 168 _describe -t docker-repos "repositories" repos && ret=0 169 return ret 170 } 171 172 __docker_complete_repositories_with_tags() { 173 [[ $PREFIX = -* ]] && return 1 174 integer ret=1 175 declare -a repos onlyrepos matched 176 declare m 177 repos=(${${${${(f)${:-"$(_call_program commands docker $docker_options images)"$'\n'}}[2,-1]}/ ##/:::}%% *}) 178 repos=(${${repos%:::<none>}#<none>}) 179 # Check if we have a prefix-match for the current prefix. 180 onlyrepos=(${repos%::*}) 181 for m in $onlyrepos; do 182 [[ ${PREFIX##${~~m}} != ${PREFIX} ]] && { 183 # Yes, complete with tags 184 repos=(${${repos/:::/:}/:/\\:}) 185 _describe -t docker-repos-with-tags "repositories with tags" repos && ret=0 186 return ret 187 } 188 done 189 # No, only complete repositories 190 onlyrepos=(${${repos%:::*}/:/\\:}) 191 _describe -t docker-repos "repositories" onlyrepos -qS : && ret=0 192 193 return ret 194 } 195 196 __docker_search() { 197 [[ $PREFIX = -* ]] && return 1 198 local cache_policy 199 zstyle -s ":completion:${curcontext}:" cache-policy cache_policy 200 if [[ -z "$cache_policy" ]]; then 201 zstyle ":completion:${curcontext}:" cache-policy __docker_caching_policy 202 fi 203 204 local searchterm cachename 205 searchterm="${words[$CURRENT]%/}" 206 cachename=_docker-search-$searchterm 207 208 local expl 209 local -a result 210 if ( [[ ${(P)+cachename} -eq 0 ]] || _cache_invalid ${cachename#_} ) \ 211 && ! _retrieve_cache ${cachename#_}; then 212 _message "Searching for ${searchterm}..." 213 result=(${${${(f)${:-"$(_call_program commands docker $docker_options search $searchterm)"$'\n'}}%% *}[2,-1]}) 214 _store_cache ${cachename#_} result 215 fi 216 _wanted dockersearch expl 'available images' compadd -a result 217 } 218 219 __docker_get_log_options() { 220 [[ $PREFIX = -* ]] && return 1 221 222 integer ret=1 223 local log_driver=${opt_args[--log-driver]:-"all"} 224 local -a common_options common_options2 awslogs_options fluentd_options gelf_options journald_options json_file_options logentries_options syslog_options splunk_options 225 226 common_options=("max-buffer-size" "mode") 227 common_options2=("env" "env-regex" "labels") 228 awslogs_options=($common_options "awslogs-create-group" "awslogs-datetime-format" "awslogs-group" "awslogs-multiline-pattern" "awslogs-region" "awslogs-stream" "tag") 229 fluentd_options=($common_options $common_options2 "fluentd-address" "fluentd-async-connect" "fluentd-buffer-limit" "fluentd-retry-wait" "fluentd-max-retries" "fluentd-sub-second-precision" "tag") 230 gcplogs_options=($common_options $common_options2 "gcp-log-cmd" "gcp-meta-id" "gcp-meta-name" "gcp-meta-zone" "gcp-project") 231 gelf_options=($common_options $common_options2 "gelf-address" "gelf-compression-level" "gelf-compression-type" "tag") 232 journald_options=($common_options $common_options2 "tag") 233 json_file_options=($common_options $common_options2 "max-file" "max-size") 234 logentries_options=($common_options $common_options2 "logentries-token" "tag") 235 syslog_options=($common_options $common_options2 "syslog-address" "syslog-facility" "syslog-format" "syslog-tls-ca-cert" "syslog-tls-cert" "syslog-tls-key" "syslog-tls-skip-verify" "tag") 236 splunk_options=($common_options $common_options2 "splunk-caname" "splunk-capath" "splunk-format" "splunk-gzip" "splunk-gzip-level" "splunk-index" "splunk-insecureskipverify" "splunk-source" "splunk-sourcetype" "splunk-token" "splunk-url" "splunk-verify-connection" "tag") 237 238 [[ $log_driver = (awslogs|all) ]] && _describe -t awslogs-options "awslogs options" awslogs_options "$@" && ret=0 239 [[ $log_driver = (fluentd|all) ]] && _describe -t fluentd-options "fluentd options" fluentd_options "$@" && ret=0 240 [[ $log_driver = (gcplogs|all) ]] && _describe -t gcplogs-options "gcplogs options" gcplogs_options "$@" && ret=0 241 [[ $log_driver = (gelf|all) ]] && _describe -t gelf-options "gelf options" gelf_options "$@" && ret=0 242 [[ $log_driver = (journald|all) ]] && _describe -t journald-options "journald options" journald_options "$@" && ret=0 243 [[ $log_driver = (json-file|all) ]] && _describe -t json-file-options "json-file options" json_file_options "$@" && ret=0 244 [[ $log_driver = (logentries|all) ]] && _describe -t logentries-options "logentries options" logentries_options "$@" && ret=0 245 [[ $log_driver = (syslog|all) ]] && _describe -t syslog-options "syslog options" syslog_options "$@" && ret=0 246 [[ $log_driver = (splunk|all) ]] && _describe -t splunk-options "splunk options" splunk_options "$@" && ret=0 247 248 return ret 249 } 250 251 __docker_complete_log_drivers() { 252 [[ $PREFIX = -* ]] && return 1 253 integer ret=1 254 drivers=(awslogs etwlogs fluentd gcplogs gelf journald json-file none splunk syslog) 255 _describe -t log-drivers "log drivers" drivers && ret=0 256 return ret 257 } 258 259 __docker_complete_log_options() { 260 [[ $PREFIX = -* ]] && return 1 261 integer ret=1 262 263 if compset -P '*='; then 264 case "${${words[-1]%=*}#*=}" in 265 (syslog-format) 266 local opts=('rfc3164' 'rfc5424' 'rfc5424micro') 267 _describe -t syslog-format-opts "syslog format options" opts && ret=0 268 ;; 269 (mode) 270 local opts=('blocking' 'non-blocking') 271 _describe -t mode-opts "mode options" opts && ret=0 272 ;; 273 *) 274 _message 'value' && ret=0 275 ;; 276 esac 277 else 278 __docker_get_log_options -qS "=" && ret=0 279 fi 280 281 return ret 282 } 283 284 __docker_complete_detach_keys() { 285 [[ $PREFIX = -* ]] && return 1 286 integer ret=1 287 288 compset -P "*," 289 keys=(${:-{a-z}}) 290 ctrl_keys=(${:-ctrl-{{a-z},{@,'[','\\','^',']',_}}}) 291 _describe -t detach_keys "[a-z]" keys -qS "," && ret=0 292 _describe -t detach_keys-ctrl "'ctrl-' + 'a-z @ [ \\\\ ] ^ _'" ctrl_keys -qS "," && ret=0 293 } 294 295 __docker_complete_pid() { 296 [[ $PREFIX = -* ]] && return 1 297 integer ret=1 298 local -a opts vopts 299 300 opts=('host') 301 vopts=('container') 302 303 if compset -P '*:'; then 304 case "${${words[-1]%:*}#*=}" in 305 (container) 306 __docker_complete_running_containers && ret=0 307 ;; 308 *) 309 _message 'value' && ret=0 310 ;; 311 esac 312 else 313 _describe -t pid-value-opts "PID Options with value" vopts -qS ":" && ret=0 314 _describe -t pid-opts "PID Options" opts && ret=0 315 fi 316 317 return ret 318 } 319 320 __docker_complete_runtimes() { 321 [[ $PREFIX = -* ]] && return 1 322 integer ret=1 323 324 emulate -L zsh 325 setopt extendedglob 326 local -a runtimes_opts 327 runtimes_opts=(${(ps: :)${(f)${${"$(_call_program commands docker $docker_options info)"##*$'\n'Runtimes: }%%$'\n'^ *}}}) 328 _describe -t runtimes-opts "runtimes options" runtimes_opts && ret=0 329 } 330 331 __docker_complete_ps_filters() { 332 [[ $PREFIX = -* ]] && return 1 333 integer ret=1 334 335 if compset -P '*='; then 336 case "${${words[-1]%=*}#*=}" in 337 (ancestor) 338 __docker_complete_images && ret=0 339 ;; 340 (before|since) 341 __docker_complete_containers && ret=0 342 ;; 343 (health) 344 health_opts=('healthy' 'none' 'starting' 'unhealthy') 345 _describe -t health-filter-opts "health filter options" health_opts && ret=0 346 ;; 347 (id) 348 __docker_complete_containers_ids && ret=0 349 ;; 350 (is-task) 351 _describe -t boolean-filter-opts "filter options" boolean_opts && ret=0 352 ;; 353 (name) 354 __docker_complete_containers_names && ret=0 355 ;; 356 (network) 357 __docker_complete_networks && ret=0 358 ;; 359 (status) 360 status_opts=('created' 'dead' 'exited' 'paused' 'restarting' 'running' 'removing') 361 _describe -t status-filter-opts "status filter options" status_opts && ret=0 362 ;; 363 (volume) 364 __docker_complete_volumes && ret=0 365 ;; 366 *) 367 _message 'value' && ret=0 368 ;; 369 esac 370 else 371 opts=('ancestor' 'before' 'exited' 'expose' 'health' 'id' 'label' 'name' 'network' 'publish' 'since' 'status' 'volume') 372 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 373 fi 374 375 return ret 376 } 377 378 __docker_complete_search_filters() { 379 [[ $PREFIX = -* ]] && return 1 380 integer ret=1 381 declare -a boolean_opts opts 382 383 boolean_opts=('true' 'false') 384 opts=('is-automated' 'is-official' 'stars') 385 386 if compset -P '*='; then 387 case "${${words[-1]%=*}#*=}" in 388 (is-automated|is-official) 389 _describe -t boolean-filter-opts "filter options" boolean_opts && ret=0 390 ;; 391 *) 392 _message 'value' && ret=0 393 ;; 394 esac 395 else 396 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 397 fi 398 399 return ret 400 } 401 402 __docker_complete_images_filters() { 403 [[ $PREFIX = -* ]] && return 1 404 integer ret=1 405 declare -a boolean_opts opts 406 407 boolean_opts=('true' 'false') 408 opts=('before' 'dangling' 'label' 'reference' 'since') 409 410 if compset -P '*='; then 411 case "${${words[-1]%=*}#*=}" in 412 (before|reference|since) 413 __docker_complete_images && ret=0 414 ;; 415 (dangling) 416 _describe -t boolean-filter-opts "filter options" boolean_opts && ret=0 417 ;; 418 *) 419 _message 'value' && ret=0 420 ;; 421 esac 422 else 423 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 424 fi 425 426 return ret 427 } 428 429 __docker_complete_events_filter() { 430 [[ $PREFIX = -* ]] && return 1 431 integer ret=1 432 declare -a opts 433 434 opts=('container' 'daemon' 'event' 'image' 'label' 'network' 'scope' 'type' 'volume') 435 436 if compset -P '*='; then 437 case "${${words[-1]%=*}#*=}" in 438 (container) 439 __docker_complete_containers && ret=0 440 ;; 441 (daemon) 442 emulate -L zsh 443 setopt extendedglob 444 local -a daemon_opts 445 daemon_opts=( 446 ${(f)${${"$(_call_program commands docker $docker_options info)"##*$'\n'Name: }%%$'\n'^ *}} 447 ${${(f)${${"$(_call_program commands docker $docker_options info)"##*$'\n'ID: }%%$'\n'^ *}}//:/\\:} 448 ) 449 _describe -t daemon-filter-opts "daemon filter options" daemon_opts && ret=0 450 ;; 451 (event) 452 local -a event_opts 453 event_opts=('attach' 'commit' 'connect' 'copy' 'create' 'delete' 'destroy' 'detach' 'die' 'disable' 'disconnect' 'enable' 'exec_create' 'exec_detach' 454 'exec_start' 'export' 'health_status' 'import' 'install' 'kill' 'load' 'mount' 'oom' 'pause' 'pull' 'push' 'reload' 'remove' 'rename' 'resize' 455 'restart' 'save' 'start' 'stop' 'tag' 'top' 'unmount' 'unpause' 'untag' 'update') 456 _describe -t event-filter-opts "event filter options" event_opts && ret=0 457 ;; 458 (image) 459 __docker_complete_images && ret=0 460 ;; 461 (network) 462 __docker_complete_networks && ret=0 463 ;; 464 (scope) 465 local -a scope_opts 466 scope_opts=('local' 'swarm') 467 _describe -t scope-filter-opts "scope filter options" scope_opts && ret=0 468 ;; 469 (type) 470 local -a type_opts 471 type_opts=('container' 'daemon' 'image' 'network' 'volume') 472 _describe -t type-filter-opts "type filter options" type_opts && ret=0 473 ;; 474 (volume) 475 __docker_complete_volumes && ret=0 476 ;; 477 *) 478 _message 'value' && ret=0 479 ;; 480 esac 481 else 482 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 483 fi 484 485 return ret 486 } 487 488 __docker_complete_prune_filters() { 489 [[ $PREFIX = -* ]] && return 1 490 integer ret=1 491 declare -a opts 492 493 opts=('until') 494 495 if compset -P '*='; then 496 case "${${words[-1]%=*}#*=}" in 497 *) 498 _message 'value' && ret=0 499 ;; 500 esac 501 else 502 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 503 fi 504 505 return ret 506 } 507 508 # BO checkpoint 509 510 __docker_checkpoint_commands() { 511 local -a _docker_checkpoint_subcommands 512 _docker_checkpoint_subcommands=( 513 "create:Create a checkpoint from a running container" 514 "ls:List checkpoints for a container" 515 "rm:Remove a checkpoint" 516 ) 517 _describe -t docker-checkpoint-commands "docker checkpoint command" _docker_checkpoint_subcommands 518 } 519 520 __docker_checkpoint_subcommand() { 521 local -a _command_args opts_help 522 local expl help="--help" 523 integer ret=1 524 525 opts_help=("(: -)--help[Print usage]") 526 527 case "$words[1]" in 528 (create) 529 _arguments $(__docker_arguments) \ 530 $opts_help \ 531 "($help)--checkpoint-dir=[Use a custom checkpoint storage directory]:dir:_directories" \ 532 "($help)--leave-running[Leave the container running after checkpoint]" \ 533 "($help -)1:container:__docker_complete_running_containers" \ 534 "($help -)2:checkpoint: " && ret=0 535 ;; 536 (ls|list) 537 _arguments $(__docker_arguments) \ 538 $opts_help \ 539 "($help)--checkpoint-dir=[Use a custom checkpoint storage directory]:dir:_directories" \ 540 "($help -)1:container:__docker_complete_containers" && ret=0 541 ;; 542 (rm|remove) 543 _arguments $(__docker_arguments) \ 544 $opts_help \ 545 "($help)--checkpoint-dir=[Use a custom checkpoint storage directory]:dir:_directories" \ 546 "($help -)1:container:__docker_complete_containers" \ 547 "($help -)2:checkpoint: " && ret=0 548 ;; 549 (help) 550 _arguments $(__docker_arguments) ":subcommand:__docker_checkpoint_commands" && ret=0 551 ;; 552 esac 553 554 return ret 555 } 556 557 # EO checkpoint 558 559 # BO container 560 561 __docker_container_commands() { 562 local -a _docker_container_subcommands 563 _docker_container_subcommands=( 564 "attach:Attach to a running container" 565 "commit:Create a new image from a container's changes" 566 "cp:Copy files/folders between a container and the local filesystem" 567 "create:Create a new container" 568 "diff:Inspect changes on a container's filesystem" 569 "exec:Run a command in a running container" 570 "export:Export a container's filesystem as a tar archive" 571 "inspect:Display detailed information on one or more containers" 572 "kill:Kill one or more running containers" 573 "logs:Fetch the logs of a container" 574 "ls:List containers" 575 "pause:Pause all processes within one or more containers" 576 "port:List port mappings or a specific mapping for the container" 577 "prune:Remove all stopped containers" 578 "rename:Rename a container" 579 "restart:Restart one or more containers" 580 "rm:Remove one or more containers" 581 "run:Run a command in a new container" 582 "start:Start one or more stopped containers" 583 "stats:Display a live stream of container(s) resource usage statistics" 584 "stop:Stop one or more running containers" 585 "top:Display the running processes of a container" 586 "unpause:Unpause all processes within one or more containers" 587 "update:Update configuration of one or more containers" 588 "wait:Block until one or more containers stop, then print their exit codes" 589 ) 590 _describe -t docker-container-commands "docker container command" _docker_container_subcommands 591 } 592 593 __docker_container_subcommand() { 594 local -a _command_args opts_help opts_attach_exec_run_start opts_create_run opts_create_run_update 595 local expl help="--help" 596 integer ret=1 597 598 opts_attach_exec_run_start=( 599 "($help)--detach-keys=[Escape key sequence used to detach a container]:sequence:__docker_complete_detach_keys" 600 ) 601 opts_create_run=( 602 "($help -a --attach)"{-a=,--attach=}"[Attach to stdin, stdout or stderr]:device:(STDIN STDOUT STDERR)" 603 "($help)*--add-host=[Add a custom host-to-IP mapping]:host\:ip mapping: " 604 "($help)*--blkio-weight-device=[Block IO (relative device weight)]:device:Block IO weight: " 605 "($help)*--cap-add=[Add Linux capabilities]:capability: " 606 "($help)*--cap-drop=[Drop Linux capabilities]:capability: " 607 "($help)--cgroup-parent=[Parent cgroup for the container]:cgroup: " 608 "($help)--cidfile=[Write the container ID to the file]:CID file:_files" 609 "($help)--cpus=[Number of CPUs (default 0.000)]:cpus: " 610 "($help)*--device=[Add a host device to the container]:device:_files" 611 "($help)*--device-cgroup-rule=[Add a rule to the cgroup allowed devices list]:device:cgroup: " 612 "($help)*--device-read-bps=[Limit the read rate (bytes per second) from a device]:device:IO rate: " 613 "($help)*--device-read-iops=[Limit the read rate (IO per second) from a device]:device:IO rate: " 614 "($help)*--device-write-bps=[Limit the write rate (bytes per second) to a device]:device:IO rate: " 615 "($help)*--device-write-iops=[Limit the write rate (IO per second) to a device]:device:IO rate: " 616 "($help)--disable-content-trust[Skip image verification]" 617 "($help)*--dns=[Custom DNS servers]:DNS server: " 618 "($help)*--dns-option=[Custom DNS options]:DNS option: " 619 "($help)*--dns-search=[Custom DNS search domains]:DNS domains: " 620 "($help)*"{-e=,--env=}"[Environment variables]:environment variable: " 621 "($help)--entrypoint=[Overwrite the default entrypoint of the image]:entry point: " 622 "($help)*--env-file=[Read environment variables from a file]:environment file:_files" 623 "($help)*--expose=[Expose a port from the container without publishing it]: " 624 "($help)*--group=[Set one or more supplementary user groups for the container]:group:_groups" 625 "($help -h --hostname)"{-h=,--hostname=}"[Container host name]:hostname:_hosts" 626 "($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]" 627 "($help)--init[Run an init inside the container that forwards signals and reaps processes]" 628 "($help)--ip=[IPv4 address]:IPv4: " 629 "($help)--ip6=[IPv6 address]:IPv6: " 630 "($help)--ipc=[IPC namespace to use]:IPC namespace: " 631 "($help)--isolation=[Container isolation technology]:isolation:(default hyperv process)" 632 "($help)*--link=[Add link to another container]:link:->link" 633 "($help)*--link-local-ip=[Container IPv4/IPv6 link-local addresses]:IPv4/IPv6: " 634 "($help)*"{-l=,--label=}"[Container metadata]:label: " 635 "($help)--log-driver=[Default driver for container logs]:logging driver:__docker_complete_log_drivers" 636 "($help)*--log-opt=[Log driver specific options]:log driver options:__docker_complete_log_options" 637 "($help)--mac-address=[Container MAC address]:MAC address: " 638 "($help)*--mount=[Attach a filesystem mount to the container]:mount: " 639 "($help)--name=[Container name]:name: " 640 "($help)--network=[Connect a container to a network]:network mode:(bridge none container host)" 641 "($help)*--network-alias=[Add network-scoped alias for the container]:alias: " 642 "($help)--oom-kill-disable[Disable OOM Killer]" 643 "($help)--oom-score-adj[Tune the host's OOM preferences for containers (accepts -1000 to 1000)]" 644 "($help)--pids-limit[Tune container pids limit (set -1 for unlimited)]" 645 "($help -P --publish-all)"{-P,--publish-all}"[Publish all exposed ports]" 646 "($help)*"{-p=,--publish=}"[Expose a container's port to the host]:port:_ports" 647 "($help)--pid=[PID namespace to use]:PID namespace:__docker_complete_pid" 648 "($help)--privileged[Give extended privileges to this container]" 649 "($help)--read-only[Mount the container's root filesystem as read only]" 650 "($help)*--security-opt=[Security options]:security option: " 651 "($help)*--shm-size=[Size of '/dev/shm' (format is '<number><unit>')]:shm size: " 652 "($help)--stop-signal=[Signal to kill a container]:signal:_signals" 653 "($help)--stop-timeout=[Timeout (in seconds) to stop a container]:time: " 654 "($help)*--sysctl=-[sysctl options]:sysctl: " 655 "($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]" 656 "($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" 657 "($help)*--ulimit=[ulimit options]:ulimit: " 658 "($help)--userns=[Container user namespace]:user namespace:(host)" 659 "($help)--tmpfs[mount tmpfs]" 660 "($help)*-v[Bind mount a volume]:volume: " 661 "($help)--volume-driver=[Optional volume driver for the container]:volume driver:(local)" 662 "($help)*--volumes-from=[Mount volumes from the specified container]:volume: " 663 "($help -w --workdir)"{-w=,--workdir=}"[Working directory inside the container]:directory:_directories" 664 ) 665 opts_create_run_update=( 666 "($help)--blkio-weight=[Block IO (relative weight), between 10 and 1000]:Block IO weight:(10 100 500 1000)" 667 "($help -c --cpu-shares)"{-c=,--cpu-shares=}"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)" 668 "($help)--cpu-period=[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: " 669 "($help)--cpu-quota=[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: " 670 "($help)--cpu-rt-period=[Limit the CPU real-time period]:CPU real-time period in microseconds: " 671 "($help)--cpu-rt-runtime=[Limit the CPU real-time runtime]:CPU real-time runtime in microseconds: " 672 "($help)--cpuset-cpus=[CPUs in which to allow execution]:CPUs: " 673 "($help)--cpuset-mems=[MEMs in which to allow execution]:MEMs: " 674 "($help)--kernel-memory=[Kernel memory limit in bytes]:Memory limit: " 675 "($help -m --memory)"{-m=,--memory=}"[Memory limit]:Memory limit: " 676 "($help)--memory-reservation=[Memory soft limit]:Memory limit: " 677 "($help)--memory-swap=[Total memory limit with swap]:Memory limit: " 678 "($help)--restart=[Restart policy]:restart policy:(no on-failure always unless-stopped)" 679 ) 680 opts_help=("(: -)--help[Print usage]") 681 682 case "$words[1]" in 683 (attach) 684 _arguments $(__docker_arguments) \ 685 $opts_help \ 686 $opts_attach_exec_run_start \ 687 "($help)--no-stdin[Do not attach stdin]" \ 688 "($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \ 689 "($help -):containers:__docker_complete_running_containers" && ret=0 690 ;; 691 (commit) 692 _arguments $(__docker_arguments) \ 693 $opts_help \ 694 "($help -a --author)"{-a=,--author=}"[Author]:author: " \ 695 "($help)*"{-c=,--change=}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \ 696 "($help -m --message)"{-m=,--message=}"[Commit message]:message: " \ 697 "($help -p --pause)"{-p,--pause}"[Pause container during commit]" \ 698 "($help -):container:__docker_complete_containers" \ 699 "($help -): :__docker_complete_repositories_with_tags" && ret=0 700 ;; 701 (cp) 702 local state 703 _arguments $(__docker_arguments) \ 704 $opts_help \ 705 "($help -L --follow-link)"{-L,--follow-link}"[Always follow symbol link]" \ 706 "($help -)1:container:->container" \ 707 "($help -)2:hostpath:_files" && ret=0 708 case $state in 709 (container) 710 if compset -P "*:"; then 711 _files && ret=0 712 else 713 __docker_complete_containers -qS ":" && ret=0 714 fi 715 ;; 716 esac 717 ;; 718 (create) 719 local state 720 _arguments $(__docker_arguments) \ 721 $opts_help \ 722 $opts_create_run \ 723 $opts_create_run_update \ 724 "($help -): :__docker_complete_images" \ 725 "($help -):command: _command_names -e" \ 726 "($help -)*::arguments: _normal" && ret=0 727 case $state in 728 (link) 729 if compset -P "*:"; then 730 _wanted alias expl "Alias" compadd -E "" && ret=0 731 else 732 __docker_complete_running_containers -qS ":" && ret=0 733 fi 734 ;; 735 esac 736 ;; 737 (diff) 738 _arguments $(__docker_arguments) \ 739 $opts_help \ 740 "($help -)*:containers:__docker_complete_containers" && ret=0 741 ;; 742 (exec) 743 local state 744 _arguments $(__docker_arguments) \ 745 $opts_help \ 746 $opts_attach_exec_run_start \ 747 "($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \ 748 "($help)*"{-e=,--env=}"[Set environment variables]:environment variable: " \ 749 "($help -i --interactive)"{-i,--interactive}"[Keep stdin open even if not attached]" \ 750 "($help)--privileged[Give extended Linux capabilities to the command]" \ 751 "($help -t --tty)"{-t,--tty}"[Allocate a pseudo-tty]" \ 752 "($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" \ 753 "($help -w --workdir)"{-w=,--workdir=}"[Working directory inside the container]:directory:_directories" \ 754 "($help -):containers:__docker_complete_running_containers" \ 755 "($help -)*::command:->anycommand" && ret=0 756 case $state in 757 (anycommand) 758 shift 1 words 759 (( CURRENT-- )) 760 _normal && ret=0 761 ;; 762 esac 763 ;; 764 (export) 765 _arguments $(__docker_arguments) \ 766 $opts_help \ 767 "($help -o --output)"{-o=,--output=}"[Write to a file, instead of stdout]:output file:_files" \ 768 "($help -)*:containers:__docker_complete_containers" && ret=0 769 ;; 770 (inspect) 771 _arguments $(__docker_arguments) \ 772 $opts_help \ 773 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 774 "($help -s --size)"{-s,--size}"[Display total file sizes]" \ 775 "($help -)*:containers:__docker_complete_containers" && ret=0 776 ;; 777 (kill) 778 _arguments $(__docker_arguments) \ 779 $opts_help \ 780 "($help -s --signal)"{-s=,--signal=}"[Signal to send]:signal:_signals" \ 781 "($help -)*:containers:__docker_complete_running_containers" && ret=0 782 ;; 783 (logs) 784 _arguments $(__docker_arguments) \ 785 $opts_help \ 786 "($help)--details[Show extra details provided to logs]" \ 787 "($help -f --follow)"{-f,--follow}"[Follow log output]" \ 788 "($help -s --since)"{-s=,--since=}"[Show logs since this timestamp]:timestamp: " \ 789 "($help -t --timestamps)"{-t,--timestamps}"[Show timestamps]" \ 790 "($help)--tail=[Output the last K lines]:lines:(1 10 20 50 all)" \ 791 "($help -)*:containers:__docker_complete_containers" && ret=0 792 ;; 793 (ls|list) 794 _arguments $(__docker_arguments) \ 795 $opts_help \ 796 "($help -a --all)"{-a,--all}"[Show all containers]" \ 797 "($help)--before=[Show only container created before...]:containers:__docker_complete_containers" \ 798 "($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_ps_filters" \ 799 "($help)--format=[Pretty-print containers using a Go template]:template: " \ 800 "($help -l --latest)"{-l,--latest}"[Show only the latest created container]" \ 801 "($help -n --last)"{-n=,--last=}"[Show n last created containers (includes all states)]:n:(1 5 10 25 50)" \ 802 "($help)--no-trunc[Do not truncate output]" \ 803 "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \ 804 "($help -s --size)"{-s,--size}"[Display total file sizes]" \ 805 "($help)--since=[Show only containers created since...]:containers:__docker_complete_containers" && ret=0 806 ;; 807 (pause|unpause) 808 _arguments $(__docker_arguments) \ 809 $opts_help \ 810 "($help -)*:containers:__docker_complete_running_containers" && ret=0 811 ;; 812 (port) 813 _arguments $(__docker_arguments) \ 814 $opts_help \ 815 "($help -)1:containers:__docker_complete_running_containers" \ 816 "($help -)2:port:_ports" && ret=0 817 ;; 818 (prune) 819 _arguments $(__docker_arguments) \ 820 $opts_help \ 821 "($help)*--filter=[Filter values]:filter:__docker_complete_prune_filters" \ 822 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 823 ;; 824 (rename) 825 _arguments $(__docker_arguments) \ 826 $opts_help \ 827 "($help -):old name:__docker_complete_containers" \ 828 "($help -):new name: " && ret=0 829 ;; 830 (restart) 831 _arguments $(__docker_arguments) \ 832 $opts_help \ 833 "($help -t --time)"{-t=,--time=}"[Number of seconds to try to stop for before killing the container]:seconds to before killing:(1 5 10 30 60)" \ 834 "($help -)*:containers:__docker_complete_containers_ids" && ret=0 835 ;; 836 (rm) 837 local state 838 _arguments $(__docker_arguments) \ 839 $opts_help \ 840 "($help -f --force)"{-f,--force}"[Force removal]" \ 841 "($help -l --link)"{-l,--link}"[Remove the specified link and not the underlying container]" \ 842 "($help -v --volumes)"{-v,--volumes}"[Remove the volumes associated to the container]" \ 843 "($help -)*:containers:->values" && ret=0 844 case $state in 845 (values) 846 if [[ ${words[(r)-f]} == -f || ${words[(r)--force]} == --force ]]; then 847 __docker_complete_containers && ret=0 848 else 849 __docker_complete_stopped_containers && ret=0 850 fi 851 ;; 852 esac 853 ;; 854 (run) 855 local state 856 _arguments $(__docker_arguments) \ 857 $opts_help \ 858 $opts_create_run \ 859 $opts_create_run_update \ 860 $opts_attach_exec_run_start \ 861 "($help -d --detach)"{-d,--detach}"[Detached mode: leave the container running in the background]" \ 862 "($help)--health-cmd=[Command to run to check health]:command: " \ 863 "($help)--health-interval=[Time between running the check]:time: " \ 864 "($help)--health-retries=[Consecutive failures needed to report unhealthy]:retries:(1 2 3 4 5)" \ 865 "($help)--health-timeout=[Maximum time to allow one check to run]:time: " \ 866 "($help)--no-healthcheck[Disable any container-specified HEALTHCHECK]" \ 867 "($help)--rm[Remove intermediate containers when it exits]" \ 868 "($help)--runtime=[Name of the runtime to be used for that container]:runtime:__docker_complete_runtimes" \ 869 "($help)--sig-proxy[Proxy all received signals to the process (non-TTY mode only)]" \ 870 "($help)--storage-opt=[Storage driver options for the container]:storage options:->storage-opt" \ 871 "($help -): :__docker_complete_images" \ 872 "($help -):command: _command_names -e" \ 873 "($help -)*::arguments: _normal" && ret=0 874 case $state in 875 (link) 876 if compset -P "*:"; then 877 _wanted alias expl "Alias" compadd -E "" && ret=0 878 else 879 __docker_complete_running_containers -qS ":" && ret=0 880 fi 881 ;; 882 (storage-opt) 883 if compset -P "*="; then 884 _message "value" && ret=0 885 else 886 opts=('size') 887 _describe -t filter-opts "storage options" opts -qS "=" && ret=0 888 fi 889 ;; 890 esac 891 ;; 892 (start) 893 _arguments $(__docker_arguments) \ 894 $opts_help \ 895 $opts_attach_exec_run_start \ 896 "($help -a --attach)"{-a,--attach}"[Attach container's stdout/stderr and forward all signals]" \ 897 "($help -i --interactive)"{-i,--interactive}"[Attach container's stdin]" \ 898 "($help -)*:containers:__docker_complete_stopped_containers" && ret=0 899 ;; 900 (stats) 901 _arguments $(__docker_arguments) \ 902 $opts_help \ 903 "($help -a --all)"{-a,--all}"[Show all containers (default shows just running)]" \ 904 "($help)--format=[Pretty-print images using a Go template]:template: " \ 905 "($help)--no-stream[Disable streaming stats and only pull the first result]" \ 906 "($help)--no-trunc[Do not truncate output]" \ 907 "($help -)*:containers:__docker_complete_running_containers" && ret=0 908 ;; 909 (stop) 910 _arguments $(__docker_arguments) \ 911 $opts_help \ 912 "($help -t --time)"{-t=,--time=}"[Number of seconds to try to stop for before killing the container]:seconds to before killing:(1 5 10 30 60)" \ 913 "($help -)*:containers:__docker_complete_running_containers" && ret=0 914 ;; 915 (top) 916 local state 917 _arguments $(__docker_arguments) \ 918 $opts_help \ 919 "($help -)1:containers:__docker_complete_running_containers" \ 920 "($help -)*:: :->ps-arguments" && ret=0 921 case $state in 922 (ps-arguments) 923 _ps && ret=0 924 ;; 925 esac 926 ;; 927 (update) 928 local state 929 _arguments $(__docker_arguments) \ 930 $opts_help \ 931 $opts_create_run_update \ 932 "($help -)*: :->values" && ret=0 933 case $state in 934 (values) 935 if [[ ${words[(r)--kernel-memory*]} = (--kernel-memory*) ]]; then 936 __docker_complete_stopped_containers && ret=0 937 else 938 __docker_complete_containers && ret=0 939 fi 940 ;; 941 esac 942 ;; 943 (wait) 944 _arguments $(__docker_arguments) \ 945 $opts_help \ 946 "($help -)*:containers:__docker_complete_running_containers" && ret=0 947 ;; 948 (help) 949 _arguments $(__docker_arguments) ":subcommand:__docker_container_commands" && ret=0 950 ;; 951 esac 952 953 return ret 954 } 955 956 # EO container 957 958 # BO image 959 960 __docker_image_commands() { 961 local -a _docker_image_subcommands 962 _docker_image_subcommands=( 963 "build:Build an image from a Dockerfile" 964 "history:Show the history of an image" 965 "import:Import the contents from a tarball to create a filesystem image" 966 "inspect:Display detailed information on one or more images" 967 "load:Load an image from a tar archive or STDIN" 968 "ls:List images" 969 "prune:Remove unused images" 970 "pull:Pull an image or a repository from a registry" 971 "push:Push an image or a repository to a registry" 972 "rm:Remove one or more images" 973 "save:Save one or more images to a tar archive (streamed to STDOUT by default)" 974 "tag:Tag an image into a repository" 975 ) 976 _describe -t docker-image-commands "docker image command" _docker_image_subcommands 977 } 978 979 __docker_image_subcommand() { 980 local -a _command_args opts_help 981 local expl help="--help" 982 integer ret=1 983 984 opts_help=("(: -)--help[Print usage]") 985 986 case "$words[1]" in 987 (build) 988 _arguments $(__docker_arguments) \ 989 $opts_help \ 990 "($help)*--add-host=[Add a custom host-to-IP mapping]:host\:ip mapping: " \ 991 "($help)*--build-arg=[Build-time variables]:<varname>=<value>: " \ 992 "($help)*--cache-from=[Images to consider as cache sources]: :__docker_complete_repositories_with_tags" \ 993 "($help -c --cpu-shares)"{-c=,--cpu-shares=}"[CPU shares (relative weight)]:CPU shares:(0 10 100 200 500 800 1000)" \ 994 "($help)--cgroup-parent=[Parent cgroup for the container]:cgroup: " \ 995 "($help)--compress[Compress the build context using gzip]" \ 996 "($help)--cpu-period=[Limit the CPU CFS (Completely Fair Scheduler) period]:CPU period: " \ 997 "($help)--cpu-quota=[Limit the CPU CFS (Completely Fair Scheduler) quota]:CPU quota: " \ 998 "($help)--cpu-rt-period=[Limit the CPU real-time period]:CPU real-time period in microseconds: " \ 999 "($help)--cpu-rt-runtime=[Limit the CPU real-time runtime]:CPU real-time runtime in microseconds: " \ 1000 "($help)--cpuset-cpus=[CPUs in which to allow execution]:CPUs: " \ 1001 "($help)--cpuset-mems=[MEMs in which to allow execution]:MEMs: " \ 1002 "($help)--disable-content-trust[Skip image verification]" \ 1003 "($help -f --file)"{-f=,--file=}"[Name of the Dockerfile]:Dockerfile:_files" \ 1004 "($help)--force-rm[Always remove intermediate containers]" \ 1005 "($help)--isolation=[Container isolation technology]:isolation:(default hyperv process)" \ 1006 "($help)*--label=[Set metadata for an image]:label=value: " \ 1007 "($help -m --memory)"{-m=,--memory=}"[Memory limit]:Memory limit: " \ 1008 "($help)--memory-swap=[Total memory limit with swap]:Memory limit: " \ 1009 "($help)--network=[Connect a container to a network]:network mode:(bridge none container host)" \ 1010 "($help)--no-cache[Do not use cache when building the image]" \ 1011 "($help)--pull[Attempt to pull a newer version of the image]" \ 1012 "($help -q --quiet)"{-q,--quiet}"[Suppress verbose build output]" \ 1013 "($help)--rm[Remove intermediate containers after a successful build]" \ 1014 "($help)*--shm-size=[Size of '/dev/shm' (format is '<number><unit>')]:shm size: " \ 1015 "($help)--squash[Squash newly built layers into a single new layer]" \ 1016 "($help -t --tag)*"{-t=,--tag=}"[Repository, name and tag for the image]: :__docker_complete_repositories_with_tags" \ 1017 "($help)*--ulimit=[ulimit options]:ulimit: " \ 1018 "($help)--userns=[Container user namespace]:user namespace:(host)" \ 1019 "($help -):path or URL:_directories" && ret=0 1020 ;; 1021 (history) 1022 _arguments $(__docker_arguments) \ 1023 $opts_help \ 1024 "($help -H --human)"{-H,--human}"[Print sizes and dates in human readable format]" \ 1025 "($help)--no-trunc[Do not truncate output]" \ 1026 "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \ 1027 "($help -)*: :__docker_complete_images" && ret=0 1028 ;; 1029 (import) 1030 _arguments $(__docker_arguments) \ 1031 $opts_help \ 1032 "($help)*"{-c=,--change=}"[Apply Dockerfile instruction to the created image]:Dockerfile:_files" \ 1033 "($help -m --message)"{-m=,--message=}"[Commit message for imported image]:message: " \ 1034 "($help -):URL:(- http:// file://)" \ 1035 "($help -): :__docker_complete_repositories_with_tags" && ret=0 1036 ;; 1037 (inspect) 1038 _arguments $(__docker_arguments) \ 1039 $opts_help \ 1040 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 1041 "($help -)*:images:__docker_complete_images" && ret=0 1042 ;; 1043 (load) 1044 _arguments $(__docker_arguments) \ 1045 $opts_help \ 1046 "($help -i --input)"{-i=,--input=}"[Read from tar archive file]:archive file:_files -g \"*.((tar|TAR)(.gz|.GZ|.Z|.bz2|.lzma|.xz|)|(tbz|tgz|txz))(-.)\"" \ 1047 "($help -q --quiet)"{-q,--quiet}"[Suppress the load output]" && ret=0 1048 ;; 1049 (ls|list) 1050 local state 1051 _arguments $(__docker_arguments) \ 1052 $opts_help \ 1053 "($help -a --all)"{-a,--all}"[Show all images]" \ 1054 "($help)--digests[Show digests]" \ 1055 "($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_images_filters" \ 1056 "($help)--format=[Pretty-print images using a Go template]:template: " \ 1057 "($help)--no-trunc[Do not truncate output]" \ 1058 "($help -q --quiet)"{-q,--quiet}"[Only show numeric IDs]" \ 1059 "($help -): :__docker_complete_repositories" && ret=0 1060 ;; 1061 (prune) 1062 _arguments $(__docker_arguments) \ 1063 $opts_help \ 1064 "($help -a --all)"{-a,--all}"[Remove all unused images, not just dangling ones]" \ 1065 "($help)*--filter=[Filter values]:filter:__docker_complete_prune_filters" \ 1066 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 1067 ;; 1068 (pull) 1069 _arguments $(__docker_arguments) \ 1070 $opts_help \ 1071 "($help -a --all-tags)"{-a,--all-tags}"[Download all tagged images]" \ 1072 "($help)--disable-content-trust[Skip image verification]" \ 1073 "($help -):name:__docker_search" && ret=0 1074 ;; 1075 (push) 1076 _arguments $(__docker_arguments) \ 1077 $opts_help \ 1078 "($help)--disable-content-trust[Skip image signing]" \ 1079 "($help -): :__docker_complete_images" && ret=0 1080 ;; 1081 (rm) 1082 _arguments $(__docker_arguments) \ 1083 $opts_help \ 1084 "($help -f --force)"{-f,--force}"[Force removal]" \ 1085 "($help)--no-prune[Do not delete untagged parents]" \ 1086 "($help -)*: :__docker_complete_images" && ret=0 1087 ;; 1088 (save) 1089 _arguments $(__docker_arguments) \ 1090 $opts_help \ 1091 "($help -o --output)"{-o=,--output=}"[Write to file]:file:_files" \ 1092 "($help -)*: :__docker_complete_images" && ret=0 1093 ;; 1094 (tag) 1095 _arguments $(__docker_arguments) \ 1096 $opts_help \ 1097 "($help -):source:__docker_complete_images"\ 1098 "($help -):destination:__docker_complete_repositories_with_tags" && ret=0 1099 ;; 1100 (help) 1101 _arguments $(__docker_arguments) ":subcommand:__docker_container_commands" && ret=0 1102 ;; 1103 esac 1104 1105 return ret 1106 } 1107 1108 # EO image 1109 1110 # BO network 1111 1112 __docker_network_complete_ls_filters() { 1113 [[ $PREFIX = -* ]] && return 1 1114 integer ret=1 1115 1116 if compset -P '*='; then 1117 case "${${words[-1]%=*}#*=}" in 1118 (driver) 1119 __docker_complete_info_plugins Network && ret=0 1120 ;; 1121 (id) 1122 __docker_complete_networks_ids && ret=0 1123 ;; 1124 (name) 1125 __docker_complete_networks_names && ret=0 1126 ;; 1127 (scope) 1128 opts=('global' 'local' 'swarm') 1129 _describe -t scope-filter-opts "Scope filter options" opts && ret=0 1130 ;; 1131 (type) 1132 opts=('builtin' 'custom') 1133 _describe -t type-filter-opts "Type filter options" opts && ret=0 1134 ;; 1135 *) 1136 _message 'value' && ret=0 1137 ;; 1138 esac 1139 else 1140 opts=('driver' 'id' 'label' 'name' 'scope' 'type') 1141 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 1142 fi 1143 1144 return ret 1145 } 1146 1147 __docker_get_networks() { 1148 [[ $PREFIX = -* ]] && return 1 1149 integer ret=1 1150 local line s 1151 declare -a lines networks 1152 1153 type=$1; shift 1154 1155 lines=(${(f)${:-"$(_call_program commands docker $docker_options network ls)"$'\n'}}) 1156 1157 # Parse header line to find columns 1158 local i=1 j=1 k header=${lines[1]} 1159 declare -A begin end 1160 while (( j < ${#header} - 1 )); do 1161 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1162 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1163 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1164 begin[${header[$i,$((j-1))]}]=$i 1165 end[${header[$i,$((j-1))]}]=$k 1166 done 1167 end[${header[$i,$((j-1))]}]=-1 1168 lines=(${lines[2,-1]}) 1169 1170 # Network ID 1171 if [[ $type = (ids|all) ]]; then 1172 for line in $lines; do 1173 s="${line[${begin[NETWORK ID]},${end[NETWORK ID]}]%% ##}" 1174 s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}" 1175 s="$s, ${${line[${begin[SCOPE]},${end[SCOPE]}]}%% ##}" 1176 networks=($networks $s) 1177 done 1178 fi 1179 1180 # Names 1181 if [[ $type = (names|all) ]]; then 1182 for line in $lines; do 1183 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1184 s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}" 1185 s="$s, ${${line[${begin[SCOPE]},${end[SCOPE]}]}%% ##}" 1186 networks=($networks $s) 1187 done 1188 fi 1189 1190 _describe -t networks-list "networks" networks "$@" && ret=0 1191 return ret 1192 } 1193 1194 __docker_complete_networks() { 1195 [[ $PREFIX = -* ]] && return 1 1196 __docker_get_networks all "$@" 1197 } 1198 1199 __docker_complete_networks_ids() { 1200 [[ $PREFIX = -* ]] && return 1 1201 __docker_get_networks ids "$@" 1202 } 1203 1204 __docker_complete_networks_names() { 1205 [[ $PREFIX = -* ]] && return 1 1206 __docker_get_networks names "$@" 1207 } 1208 1209 __docker_network_commands() { 1210 local -a _docker_network_subcommands 1211 _docker_network_subcommands=( 1212 "connect:Connect a container to a network" 1213 "create:Creates a new network with a name specified by the user" 1214 "disconnect:Disconnects a container from a network" 1215 "inspect:Displays detailed information on a network" 1216 "ls:Lists all the networks created by the user" 1217 "prune:Remove all unused networks" 1218 "rm:Deletes one or more networks" 1219 ) 1220 _describe -t docker-network-commands "docker network command" _docker_network_subcommands 1221 } 1222 1223 __docker_network_subcommand() { 1224 local -a _command_args opts_help 1225 local expl help="--help" 1226 integer ret=1 1227 1228 opts_help=("(: -)--help[Print usage]") 1229 1230 case "$words[1]" in 1231 (connect) 1232 _arguments $(__docker_arguments) \ 1233 $opts_help \ 1234 "($help)*--alias=[Add network-scoped alias for the container]:alias: " \ 1235 "($help)--ip=[IPv4 address]:IPv4: " \ 1236 "($help)--ip6=[IPv6 address]:IPv6: " \ 1237 "($help)*--link=[Add a link to another container]:link:->link" \ 1238 "($help)*--link-local-ip=[Add a link-local address for the container]:IPv4/IPv6: " \ 1239 "($help -)1:network:__docker_complete_networks" \ 1240 "($help -)2:containers:__docker_complete_containers" && ret=0 1241 1242 case $state in 1243 (link) 1244 if compset -P "*:"; then 1245 _wanted alias expl "Alias" compadd -E "" && ret=0 1246 else 1247 __docker_complete_running_containers -qS ":" && ret=0 1248 fi 1249 ;; 1250 esac 1251 ;; 1252 (create) 1253 _arguments $(__docker_arguments) -A '-*' \ 1254 $opts_help \ 1255 "($help)--attachable[Enable manual container attachment]" \ 1256 "($help)*--aux-address[Auxiliary IPv4 or IPv6 addresses used by network driver]:key=IP: " \ 1257 "($help -d --driver)"{-d=,--driver=}"[Driver to manage the Network]:driver:(null host bridge overlay)" \ 1258 "($help)*--gateway=[IPv4 or IPv6 Gateway for the master subnet]:IP: " \ 1259 "($help)--internal[Restricts external access to the network]" \ 1260 "($help)*--ip-range=[Allocate container ip from a sub-range]:IP/mask: " \ 1261 "($help)--ipam-driver=[IP Address Management Driver]:driver:(default)" \ 1262 "($help)*--ipam-opt=[Custom IPAM plugin options]:opt=value: " \ 1263 "($help)--ipv6[Enable IPv6 networking]" \ 1264 "($help)*--label=[Set metadata on a network]:label=value: " \ 1265 "($help)*"{-o=,--opt=}"[Driver specific options]:opt=value: " \ 1266 "($help)*--subnet=[Subnet in CIDR format that represents a network segment]:IP/mask: " \ 1267 "($help -)1:Network Name: " && ret=0 1268 ;; 1269 (disconnect) 1270 _arguments $(__docker_arguments) \ 1271 $opts_help \ 1272 "($help -)1:network:__docker_complete_networks" \ 1273 "($help -)2:containers:__docker_complete_containers" && ret=0 1274 ;; 1275 (inspect) 1276 _arguments $(__docker_arguments) \ 1277 $opts_help \ 1278 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 1279 "($help)--verbose[Show detailed information]" \ 1280 "($help -)*:network:__docker_complete_networks" && ret=0 1281 ;; 1282 (ls) 1283 _arguments $(__docker_arguments) \ 1284 $opts_help \ 1285 "($help)--no-trunc[Do not truncate the output]" \ 1286 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:__docker_network_complete_ls_filters" \ 1287 "($help)--format=[Pretty-print networks using a Go template]:template: " \ 1288 "($help -q --quiet)"{-q,--quiet}"[Only display numeric IDs]" && ret=0 1289 ;; 1290 (prune) 1291 _arguments $(__docker_arguments) \ 1292 $opts_help \ 1293 "($help)*--filter=[Filter values]:filter:__docker_complete_prune_filters" \ 1294 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 1295 ;; 1296 (rm) 1297 _arguments $(__docker_arguments) \ 1298 $opts_help \ 1299 "($help -)*:network:__docker_complete_networks" && ret=0 1300 ;; 1301 (help) 1302 _arguments $(__docker_arguments) ":subcommand:__docker_network_commands" && ret=0 1303 ;; 1304 esac 1305 1306 return ret 1307 } 1308 1309 # EO network 1310 1311 # BO node 1312 1313 __docker_node_complete_ls_filters() { 1314 [[ $PREFIX = -* ]] && return 1 1315 integer ret=1 1316 1317 if compset -P '*='; then 1318 case "${${words[-1]%=*}#*=}" in 1319 (id) 1320 __docker_complete_nodes_ids && ret=0 1321 ;; 1322 (membership) 1323 membership_opts=('accepted' 'pending' 'rejected') 1324 _describe -t membership-opts "membership options" membership_opts && ret=0 1325 ;; 1326 (name) 1327 __docker_complete_nodes_names && ret=0 1328 ;; 1329 (role) 1330 role_opts=('manager' 'worker') 1331 _describe -t role-opts "role options" role_opts && ret=0 1332 ;; 1333 *) 1334 _message 'value' && ret=0 1335 ;; 1336 esac 1337 else 1338 opts=('id' 'label' 'membership' 'name' 'role') 1339 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1340 fi 1341 1342 return ret 1343 } 1344 1345 __docker_node_complete_ps_filters() { 1346 [[ $PREFIX = -* ]] && return 1 1347 integer ret=1 1348 1349 if compset -P '*='; then 1350 case "${${words[-1]%=*}#*=}" in 1351 (desired-state) 1352 state_opts=('accepted' 'running' 'shutdown') 1353 _describe -t state-opts "desired state options" state_opts && ret=0 1354 ;; 1355 *) 1356 _message 'value' && ret=0 1357 ;; 1358 esac 1359 else 1360 opts=('desired-state' 'id' 'label' 'name') 1361 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1362 fi 1363 1364 return ret 1365 } 1366 1367 __docker_nodes() { 1368 [[ $PREFIX = -* ]] && return 1 1369 integer ret=1 1370 local line s 1371 declare -a lines nodes args 1372 1373 type=$1; shift 1374 filter=$1; shift 1375 [[ $filter != "none" ]] && args=("-f $filter") 1376 1377 lines=(${(f)${:-"$(_call_program commands docker $docker_options node ls $args)"$'\n'}}) 1378 # Parse header line to find columns 1379 local i=1 j=1 k header=${lines[1]} 1380 declare -A begin end 1381 while (( j < ${#header} - 1 )); do 1382 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1383 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1384 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1385 begin[${header[$i,$((j-1))]}]=$i 1386 end[${header[$i,$((j-1))]}]=$k 1387 done 1388 end[${header[$i,$((j-1))]}]=-1 1389 lines=(${lines[2,-1]}) 1390 1391 # Node ID 1392 if [[ $type = (ids|all) ]]; then 1393 for line in $lines; do 1394 s="${line[${begin[ID]},${end[ID]}]%% ##}" 1395 nodes=($nodes $s) 1396 done 1397 fi 1398 1399 # Names 1400 if [[ $type = (names|all) ]]; then 1401 for line in $lines; do 1402 s="${line[${begin[HOSTNAME]},${end[HOSTNAME]}]%% ##}" 1403 nodes=($nodes $s) 1404 done 1405 fi 1406 1407 _describe -t nodes-list "nodes" nodes "$@" && ret=0 1408 return ret 1409 } 1410 1411 __docker_complete_nodes() { 1412 [[ $PREFIX = -* ]] && return 1 1413 __docker_nodes all none "$@" 1414 } 1415 1416 __docker_complete_nodes_ids() { 1417 [[ $PREFIX = -* ]] && return 1 1418 __docker_nodes ids none "$@" 1419 } 1420 1421 __docker_complete_nodes_names() { 1422 [[ $PREFIX = -* ]] && return 1 1423 __docker_nodes names none "$@" 1424 } 1425 1426 __docker_complete_pending_nodes() { 1427 [[ $PREFIX = -* ]] && return 1 1428 __docker_nodes all "membership=pending" "$@" 1429 } 1430 1431 __docker_complete_manager_nodes() { 1432 [[ $PREFIX = -* ]] && return 1 1433 __docker_nodes all "role=manager" "$@" 1434 } 1435 1436 __docker_complete_worker_nodes() { 1437 [[ $PREFIX = -* ]] && return 1 1438 __docker_nodes all "role=worker" "$@" 1439 } 1440 1441 __docker_node_commands() { 1442 local -a _docker_node_subcommands 1443 _docker_node_subcommands=( 1444 "demote:Demote a node as manager in the swarm" 1445 "inspect:Display detailed information on one or more nodes" 1446 "ls:List nodes in the swarm" 1447 "promote:Promote a node as manager in the swarm" 1448 "rm:Remove one or more nodes from the swarm" 1449 "ps:List tasks running on one or more nodes, defaults to current node" 1450 "update:Update a node" 1451 ) 1452 _describe -t docker-node-commands "docker node command" _docker_node_subcommands 1453 } 1454 1455 __docker_node_subcommand() { 1456 local -a _command_args opts_help 1457 local expl help="--help" 1458 integer ret=1 1459 1460 opts_help=("(: -)--help[Print usage]") 1461 1462 case "$words[1]" in 1463 (rm|remove) 1464 _arguments $(__docker_arguments) \ 1465 $opts_help \ 1466 "($help -f --force)"{-f,--force}"[Force remove a node from the swarm]" \ 1467 "($help -)*:node:__docker_complete_pending_nodes" && ret=0 1468 ;; 1469 (demote) 1470 _arguments $(__docker_arguments) \ 1471 $opts_help \ 1472 "($help -)*:node:__docker_complete_manager_nodes" && ret=0 1473 ;; 1474 (inspect) 1475 _arguments $(__docker_arguments) \ 1476 $opts_help \ 1477 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 1478 "($help)--pretty[Print the information in a human friendly format]" \ 1479 "($help -)*:node:__docker_complete_nodes" && ret=0 1480 ;; 1481 (ls|list) 1482 _arguments $(__docker_arguments) \ 1483 $opts_help \ 1484 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:__docker_node_complete_ls_filters" \ 1485 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0 1486 ;; 1487 (promote) 1488 _arguments $(__docker_arguments) \ 1489 $opts_help \ 1490 "($help -)*:node:__docker_complete_worker_nodes" && ret=0 1491 ;; 1492 (ps) 1493 _arguments $(__docker_arguments) \ 1494 $opts_help \ 1495 "($help -a --all)"{-a,--all}"[Display all instances]" \ 1496 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:__docker_node_complete_ps_filters" \ 1497 "($help)--format=[Format the output using the given go template]:template: " \ 1498 "($help)--no-resolve[Do not map IDs to Names]" \ 1499 "($help)--no-trunc[Do not truncate output]" \ 1500 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" \ 1501 "($help -)*:node:__docker_complete_nodes" && ret=0 1502 ;; 1503 (update) 1504 _arguments $(__docker_arguments) \ 1505 $opts_help \ 1506 "($help)--availability=[Availability of the node]:availability:(active pause drain)" \ 1507 "($help)*--label-add=[Add or update a node label]:key=value: " \ 1508 "($help)*--label-rm=[Remove a node label if exists]:label: " \ 1509 "($help)--role=[Role of the node]:role:(manager worker)" \ 1510 "($help -)1:node:__docker_complete_nodes" && ret=0 1511 ;; 1512 (help) 1513 _arguments $(__docker_arguments) ":subcommand:__docker_node_commands" && ret=0 1514 ;; 1515 esac 1516 1517 return ret 1518 } 1519 1520 # EO node 1521 1522 # BO plugin 1523 1524 __docker_plugin_complete_ls_filters() { 1525 [[ $PREFIX = -* ]] && return 1 1526 integer ret=1 1527 1528 if compset -P '*='; then 1529 case "${${words[-1]%=*}#*=}" in 1530 (capability) 1531 opts=('authz' 'ipamdriver' 'logdriver' 'metricscollector' 'networkdriver' 'volumedriver') 1532 _describe -t capability-opts "capability options" opts && ret=0 1533 ;; 1534 (enabled) 1535 opts=('false' 'true') 1536 _describe -t enabled-opts "enabled options" opts && ret=0 1537 ;; 1538 *) 1539 _message 'value' && ret=0 1540 ;; 1541 esac 1542 else 1543 opts=('capability' 'enabled') 1544 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1545 fi 1546 1547 return ret 1548 } 1549 1550 __docker_plugins() { 1551 [[ $PREFIX = -* ]] && return 1 1552 integer ret=1 1553 local line s 1554 declare -a lines plugins args 1555 1556 filter=$1; shift 1557 [[ $filter != "none" ]] && args=("-f $filter") 1558 1559 lines=(${(f)${:-"$(_call_program commands docker $docker_options plugin ls $args)"$'\n'}}) 1560 1561 # Parse header line to find columns 1562 local i=1 j=1 k header=${lines[1]} 1563 declare -A begin end 1564 while (( j < ${#header} - 1 )); do 1565 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1566 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1567 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1568 begin[${header[$i,$((j-1))]}]=$i 1569 end[${header[$i,$((j-1))]}]=$k 1570 done 1571 end[${header[$i,$((j-1))]}]=-1 1572 lines=(${lines[2,-1]}) 1573 1574 # Name 1575 for line in $lines; do 1576 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1577 s="$s:${(l:7:: :::)${${line[${begin[TAG]},${end[TAG]}]}%% ##}}" 1578 plugins=($plugins $s) 1579 done 1580 1581 _describe -t plugins-list "plugins" plugins "$@" && ret=0 1582 return ret 1583 } 1584 1585 __docker_complete_plugins() { 1586 [[ $PREFIX = -* ]] && return 1 1587 __docker_plugins none "$@" 1588 } 1589 1590 __docker_complete_enabled_plugins() { 1591 [[ $PREFIX = -* ]] && return 1 1592 __docker_plugins enabled=true "$@" 1593 } 1594 1595 __docker_complete_disabled_plugins() { 1596 [[ $PREFIX = -* ]] && return 1 1597 __docker_plugins enabled=false "$@" 1598 } 1599 1600 __docker_plugin_commands() { 1601 local -a _docker_plugin_subcommands 1602 _docker_plugin_subcommands=( 1603 "disable:Disable a plugin" 1604 "enable:Enable a plugin" 1605 "inspect:Return low-level information about a plugin" 1606 "install:Install a plugin" 1607 "ls:List plugins" 1608 "push:Push a plugin" 1609 "rm:Remove a plugin" 1610 "set:Change settings for a plugin" 1611 "upgrade:Upgrade an existing plugin" 1612 ) 1613 _describe -t docker-plugin-commands "docker plugin command" _docker_plugin_subcommands 1614 } 1615 1616 __docker_plugin_subcommand() { 1617 local -a _command_args opts_help 1618 local expl help="--help" 1619 integer ret=1 1620 1621 opts_help=("(: -)--help[Print usage]") 1622 1623 case "$words[1]" in 1624 (disable) 1625 _arguments $(__docker_arguments) \ 1626 $opts_help \ 1627 "($help -f --force)"{-f,--force}"[Force the disable of an active plugin]" \ 1628 "($help -)1:plugin:__docker_complete_enabled_plugins" && ret=0 1629 ;; 1630 (enable) 1631 _arguments $(__docker_arguments) \ 1632 $opts_help \ 1633 "($help)--timeout=[HTTP client timeout (in seconds)]:timeout: " \ 1634 "($help -)1:plugin:__docker_complete_disabled_plugins" && ret=0 1635 ;; 1636 (inspect) 1637 _arguments $(__docker_arguments) \ 1638 $opts_help \ 1639 "($help -f --format)"{-f=,--format=}"[Format the output using the given Go template]:template: " \ 1640 "($help -)*:plugin:__docker_complete_plugins" && ret=0 1641 ;; 1642 (install) 1643 _arguments $(__docker_arguments) \ 1644 $opts_help \ 1645 "($help)--alias=[Local name for plugin]:alias: " \ 1646 "($help)--disable[Do not enable the plugin on install]" \ 1647 "($help)--disable-content-trust[Skip image verification (default true)]" \ 1648 "($help)--grant-all-permissions[Grant all permissions necessary to run the plugin]" \ 1649 "($help -)1:plugin:__docker_complete_plugins" \ 1650 "($help -)*:key=value: " && ret=0 1651 ;; 1652 (ls|list) 1653 _arguments $(__docker_arguments) \ 1654 $opts_help \ 1655 "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:__docker_plugin_complete_ls_filters" \ 1656 "($help --format)--format=[Format the output using the given Go template]:template: " \ 1657 "($help)--no-trunc[Don't truncate output]" \ 1658 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0 1659 ;; 1660 (push) 1661 _arguments $(__docker_arguments) \ 1662 $opts_help \ 1663 "($help)--disable-content-trust[Skip image verification (default true)]" \ 1664 "($help -)1:plugin:__docker_complete_plugins" && ret=0 1665 ;; 1666 (rm|remove) 1667 _arguments $(__docker_arguments) \ 1668 $opts_help \ 1669 "($help -f --force)"{-f,--force}"[Force the removal of an active plugin]" \ 1670 "($help -)*:plugin:__docker_complete_plugins" && ret=0 1671 ;; 1672 (set) 1673 _arguments $(__docker_arguments) \ 1674 $opts_help \ 1675 "($help -)1:plugin:__docker_complete_plugins" \ 1676 "($help -)*:key=value: " && ret=0 1677 ;; 1678 (upgrade) 1679 _arguments $(__docker_arguments) \ 1680 $opts_help \ 1681 "($help)--disable-content-trust[Skip image verification (default true)]" \ 1682 "($help)--grant-all-permissions[Grant all permissions necessary to run the plugin]" \ 1683 "($help)--skip-remote-check[Do not check if specified remote plugin matches existing plugin image]" \ 1684 "($help -)1:plugin:__docker_complete_plugins" \ 1685 "($help -):remote: " && ret=0 1686 ;; 1687 (help) 1688 _arguments $(__docker_arguments) ":subcommand:__docker_plugin_commands" && ret=0 1689 ;; 1690 esac 1691 1692 return ret 1693 } 1694 1695 # EO plugin 1696 1697 # BO secret 1698 1699 __docker_secrets() { 1700 [[ $PREFIX = -* ]] && return 1 1701 integer ret=1 1702 local line s 1703 declare -a lines secrets 1704 1705 type=$1; shift 1706 1707 lines=(${(f)${:-"$(_call_program commands docker $docker_options secret ls)"$'\n'}}) 1708 1709 # Parse header line to find columns 1710 local i=1 j=1 k header=${lines[1]} 1711 declare -A begin end 1712 while (( j < ${#header} - 1 )); do 1713 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1714 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1715 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1716 begin[${header[$i,$((j-1))]}]=$i 1717 end[${header[$i,$((j-1))]}]=$k 1718 done 1719 end[${header[$i,$((j-1))]}]=-1 1720 lines=(${lines[2,-1]}) 1721 1722 # ID 1723 if [[ $type = (ids|all) ]]; then 1724 for line in $lines; do 1725 s="${line[${begin[ID]},${end[ID]}]%% ##}" 1726 secrets=($secrets $s) 1727 done 1728 fi 1729 1730 # Names 1731 if [[ $type = (names|all) ]]; then 1732 for line in $lines; do 1733 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1734 secrets=($secrets $s) 1735 done 1736 fi 1737 1738 _describe -t secrets-list "secrets" secrets "$@" && ret=0 1739 return ret 1740 } 1741 1742 __docker_complete_secrets() { 1743 [[ $PREFIX = -* ]] && return 1 1744 __docker_secrets all "$@" 1745 } 1746 1747 __docker_secret_commands() { 1748 local -a _docker_secret_subcommands 1749 _docker_secret_subcommands=( 1750 "create:Create a secret using stdin as content" 1751 "inspect:Display detailed information on one or more secrets" 1752 "ls:List secrets" 1753 "rm:Remove one or more secrets" 1754 ) 1755 _describe -t docker-secret-commands "docker secret command" _docker_secret_subcommands 1756 } 1757 1758 __docker_secret_subcommand() { 1759 local -a _command_args opts_help 1760 local expl help="--help" 1761 integer ret=1 1762 1763 opts_help=("(: -)--help[Print usage]") 1764 1765 case "$words[1]" in 1766 (create) 1767 _arguments $(__docker_arguments) -A '-*' \ 1768 $opts_help \ 1769 "($help)*"{-l=,--label=}"[Secret labels]:label: " \ 1770 "($help -):secret: " && ret=0 1771 ;; 1772 (inspect) 1773 _arguments $(__docker_arguments) \ 1774 $opts_help \ 1775 "($help -f --format)"{-f=,--format=}"[Format the output using the given Go template]:template: " \ 1776 "($help -)*:secret:__docker_complete_secrets" && ret=0 1777 ;; 1778 (ls|list) 1779 _arguments $(__docker_arguments) \ 1780 $opts_help \ 1781 "($help)--format=[Format the output using the given go template]:template: " \ 1782 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0 1783 ;; 1784 (rm|remove) 1785 _arguments $(__docker_arguments) \ 1786 $opts_help \ 1787 "($help -)*:secret:__docker_complete_secrets" && ret=0 1788 ;; 1789 (help) 1790 _arguments $(__docker_arguments) ":subcommand:__docker_secret_commands" && ret=0 1791 ;; 1792 esac 1793 1794 return ret 1795 } 1796 1797 # EO secret 1798 1799 # BO service 1800 1801 __docker_service_complete_ls_filters() { 1802 [[ $PREFIX = -* ]] && return 1 1803 integer ret=1 1804 1805 if compset -P '*='; then 1806 case "${${words[-1]%=*}#*=}" in 1807 (id) 1808 __docker_complete_services_ids && ret=0 1809 ;; 1810 (mode) 1811 opts=('global' 'replicated') 1812 _describe -t mode-opts "mode options" opts && ret=0 1813 ;; 1814 (name) 1815 __docker_complete_services_names && ret=0 1816 ;; 1817 *) 1818 _message 'value' && ret=0 1819 ;; 1820 esac 1821 else 1822 opts=('id' 'label' 'mode' 'name') 1823 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1824 fi 1825 1826 return ret 1827 } 1828 1829 __docker_service_complete_ps_filters() { 1830 [[ $PREFIX = -* ]] && return 1 1831 integer ret=1 1832 1833 if compset -P '*='; then 1834 case "${${words[-1]%=*}#*=}" in 1835 (desired-state) 1836 state_opts=('accepted' 'running' 'shutdown') 1837 _describe -t state-opts "desired state options" state_opts && ret=0 1838 ;; 1839 *) 1840 _message 'value' && ret=0 1841 ;; 1842 esac 1843 else 1844 opts=('desired-state' 'id' 'label' 'name') 1845 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 1846 fi 1847 1848 return ret 1849 } 1850 1851 __docker_service_complete_placement_pref() { 1852 [[ $PREFIX = -* ]] && return 1 1853 integer ret=1 1854 1855 if compset -P '*='; then 1856 case "${${words[-1]%=*}#*=}" in 1857 (spread) 1858 opts=('engine.labels' 'node.labels') 1859 _describe -t spread-opts "spread options" opts -qS "." && ret=0 1860 ;; 1861 *) 1862 _message 'value' && ret=0 1863 ;; 1864 esac 1865 else 1866 opts=('spread') 1867 _describe -t pref-opts "placement pref options" opts -qS "=" && ret=0 1868 fi 1869 1870 return ret 1871 } 1872 1873 __docker_services() { 1874 [[ $PREFIX = -* ]] && return 1 1875 integer ret=1 1876 local line s 1877 declare -a lines services 1878 1879 type=$1; shift 1880 1881 lines=(${(f)${:-"$(_call_program commands docker $docker_options service ls)"$'\n'}}) 1882 1883 # Parse header line to find columns 1884 local i=1 j=1 k header=${lines[1]} 1885 declare -A begin end 1886 while (( j < ${#header} - 1 )); do 1887 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 1888 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 1889 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 1890 begin[${header[$i,$((j-1))]}]=$i 1891 end[${header[$i,$((j-1))]}]=$k 1892 done 1893 end[${header[$i,$((j-1))]}]=-1 1894 lines=(${lines[2,-1]}) 1895 1896 # Service ID 1897 if [[ $type = (ids|all) ]]; then 1898 for line in $lines; do 1899 s="${line[${begin[ID]},${end[ID]}]%% ##}" 1900 s="$s:${(l:7:: :::)${${line[${begin[IMAGE]},${end[IMAGE]}]}%% ##}}" 1901 services=($services $s) 1902 done 1903 fi 1904 1905 # Names 1906 if [[ $type = (names|all) ]]; then 1907 for line in $lines; do 1908 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 1909 s="$s:${(l:7:: :::)${${line[${begin[IMAGE]},${end[IMAGE]}]}%% ##}}" 1910 services=($services $s) 1911 done 1912 fi 1913 1914 _describe -t services-list "services" services "$@" && ret=0 1915 return ret 1916 } 1917 1918 __docker_complete_services() { 1919 [[ $PREFIX = -* ]] && return 1 1920 __docker_services all "$@" 1921 } 1922 1923 __docker_complete_services_ids() { 1924 [[ $PREFIX = -* ]] && return 1 1925 __docker_services ids "$@" 1926 } 1927 1928 __docker_complete_services_names() { 1929 [[ $PREFIX = -* ]] && return 1 1930 __docker_services names "$@" 1931 } 1932 1933 __docker_service_commands() { 1934 local -a _docker_service_subcommands 1935 _docker_service_subcommands=( 1936 "create:Create a new service" 1937 "inspect:Display detailed information on one or more services" 1938 "logs:Fetch the logs of a service or task" 1939 "ls:List services" 1940 "rm:Remove one or more services" 1941 "rollback:Revert changes to a service's configuration" 1942 "scale:Scale one or multiple replicated services" 1943 "ps:List the tasks of a service" 1944 "update:Update a service" 1945 ) 1946 _describe -t docker-service-commands "docker service command" _docker_service_subcommands 1947 } 1948 1949 __docker_service_subcommand() { 1950 local -a _command_args opts_help opts_create_update 1951 local expl help="--help" 1952 integer ret=1 1953 1954 opts_help=("(: -)--help[Print usage]") 1955 opts_create_update=( 1956 "($help)*--constraint=[Placement constraints]:constraint: " 1957 "($help)--endpoint-mode=[Placement constraints]:mode:(dnsrr vip)" 1958 "($help)*"{-e=,--env=}"[Set environment variables]:env: " 1959 "($help)--health-cmd=[Command to run to check health]:command: " 1960 "($help)--health-interval=[Time between running the check]:time: " 1961 "($help)--health-retries=[Consecutive failures needed to report unhealthy]:retries:(1 2 3 4 5)" 1962 "($help)--health-timeout=[Maximum time to allow one check to run]:time: " 1963 "($help)--hostname=[Service container hostname]:hostname: " \ 1964 "($help)--isolation=[Service container isolation mode]:isolation:(default process hyperv)" \ 1965 "($help)*--label=[Service labels]:label: " 1966 "($help)--limit-cpu=[Limit CPUs]:value: " 1967 "($help)--limit-memory=[Limit Memory]:value: " 1968 "($help)--log-driver=[Logging driver for service]:logging driver:__docker_complete_log_drivers" 1969 "($help)*--log-opt=[Logging driver options]:log driver options:__docker_complete_log_options" 1970 "($help)*--mount=[Attach a filesystem mount to the service]:mount: " 1971 "($help)*--network=[Network attachments]:network: " 1972 "($help)--no-healthcheck[Disable any container-specified HEALTHCHECK]" 1973 "($help)--read-only[Mount the container's root filesystem as read only]" 1974 "($help)--replicas=[Number of tasks]:replicas: " 1975 "($help)--reserve-cpu=[Reserve CPUs]:value: " 1976 "($help)--reserve-memory=[Reserve Memory]:value: " 1977 "($help)--restart-condition=[Restart when condition is met]:mode:(any none on-failure)" 1978 "($help)--restart-delay=[Delay between restart attempts]:delay: " 1979 "($help)--restart-max-attempts=[Maximum number of restarts before giving up]:max-attempts: " 1980 "($help)--restart-window=[Window used to evaluate the restart policy]:duration: " 1981 "($help)--rollback-delay=[Delay between task rollbacks]:duration: " 1982 "($help)--rollback-failure-action=[Action on rollback failure]:action:(continue pause)" 1983 "($help)--rollback-max-failure-ratio=[Failure rate to tolerate during a rollback]:failure rate: " 1984 "($help)--rollback-monitor=[Duration after each task rollback to monitor for failure]:duration: " 1985 "($help)--rollback-parallelism=[Maximum number of tasks rolled back simultaneously]:number: " 1986 "($help)*--secret=[Specify secrets to expose to the service]:secret:__docker_complete_secrets" 1987 "($help)--stop-grace-period=[Time to wait before force killing a container]:grace period: " 1988 "($help)--stop-signal=[Signal to stop the container]:signal:_signals" 1989 "($help -t --tty)"{-t,--tty}"[Allocate a pseudo-TTY]" 1990 "($help)--update-delay=[Delay between updates]:delay: " 1991 "($help)--update-failure-action=[Action on update failure]:mode:(continue pause rollback)" 1992 "($help)--update-max-failure-ratio=[Failure rate to tolerate during an update]:fraction: " 1993 "($help)--update-monitor=[Duration after each task update to monitor for failure]:window: " 1994 "($help)--update-parallelism=[Maximum number of tasks updated simultaneously]:number: " 1995 "($help -u --user)"{-u=,--user=}"[Username or UID]:user:_users" 1996 "($help)--with-registry-auth[Send registry authentication details to swarm agents]" 1997 "($help -w --workdir)"{-w=,--workdir=}"[Working directory inside the container]:directory:_directories" 1998 ) 1999 2000 case "$words[1]" in 2001 (create) 2002 _arguments $(__docker_arguments) \ 2003 $opts_help \ 2004 $opts_create_update \ 2005 "($help)*--container-label=[Container labels]:label: " \ 2006 "($help)*--dns=[Set custom DNS servers]:DNS: " \ 2007 "($help)*--dns-option=[Set DNS options]:DNS option: " \ 2008 "($help)*--dns-search=[Set custom DNS search domains]:DNS search: " \ 2009 "($help)*--env-file=[Read environment variables from a file]:environment file:_files" \ 2010 "($help)--mode=[Service Mode]:mode:(global replicated)" \ 2011 "($help)--name=[Service name]:name: " \ 2012 "($help)*--placement-pref=[Add a placement preference]:pref:__docker_service_complete_placement_pref" \ 2013 "($help)*"{-p=,--publish=}"[Publish a port as a node port]:port: " \ 2014 "($help -): :__docker_complete_images" \ 2015 "($help -):command: _command_names -e" \ 2016 "($help -)*::arguments: _normal" && ret=0 2017 ;; 2018 (inspect) 2019 _arguments $(__docker_arguments) \ 2020 $opts_help \ 2021 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 2022 "($help)--pretty[Print the information in a human friendly format]" \ 2023 "($help -)*:service:__docker_complete_services" && ret=0 2024 ;; 2025 (logs) 2026 _arguments $(__docker_arguments) \ 2027 $opts_help \ 2028 "($help -f --follow)"{-f,--follow}"[Follow log output]" \ 2029 "($help)--no-resolve[Do not map IDs to Names]" \ 2030 "($help)--no-task-ids[Do not include task IDs]" \ 2031 "($help)--no-trunc[Do not truncate output]" \ 2032 "($help)--since=[Show logs since timestamp]:timestamp: " \ 2033 "($help)--tail=[Number of lines to show from the end of the logs]:lines:(1 10 20 50 all)" \ 2034 "($help -t --timestamps)"{-t,--timestamps}"[Show timestamps]" \ 2035 "($help -)1:service:__docker_complete_services" && ret=0 2036 ;; 2037 (ls|list) 2038 _arguments $(__docker_arguments) \ 2039 $opts_help \ 2040 "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:__docker_service_complete_ls_filters" \ 2041 "($help)--format=[Pretty-print services using a Go template]:template: " \ 2042 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0 2043 ;; 2044 (rm|remove) 2045 _arguments $(__docker_arguments) \ 2046 $opts_help \ 2047 "($help -)*:service:__docker_complete_services" && ret=0 2048 ;; 2049 (rollback) 2050 _arguments $(__docker_arguments) \ 2051 $opts_help \ 2052 "($help -d --detach)"{-d=false,--detach=false}"[Disable detached mode]" \ 2053 "($help -q --quiet)"{-q,--quiet}"[Suppress progress output]" \ 2054 "($help -)*:service:__docker_complete_services" && ret=0 2055 ;; 2056 (scale) 2057 _arguments $(__docker_arguments) \ 2058 $opts_help \ 2059 "($help -d --detach)"{-d=false,--detach=false}"[Disable detached mode]" \ 2060 "($help -)*:service:->values" && ret=0 2061 case $state in 2062 (values) 2063 if compset -P '*='; then 2064 _message 'replicas' && ret=0 2065 else 2066 __docker_complete_services -qS "=" 2067 fi 2068 ;; 2069 esac 2070 ;; 2071 (ps) 2072 _arguments $(__docker_arguments) \ 2073 $opts_help \ 2074 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:__docker_service_complete_ps_filters" \ 2075 "($help)--format=[Format the output using the given go template]:template: " \ 2076 "($help)--no-resolve[Do not map IDs to Names]" \ 2077 "($help)--no-trunc[Do not truncate output]" \ 2078 "($help -q --quiet)"{-q,--quiet}"[Only display task IDs]" \ 2079 "($help -)*:service:__docker_complete_services" && ret=0 2080 ;; 2081 (update) 2082 _arguments $(__docker_arguments) \ 2083 $opts_help \ 2084 $opts_create_update \ 2085 "($help)--arg=[Service command args]:arguments: _normal" \ 2086 "($help)*--container-label-add=[Add or update container labels]:label: " \ 2087 "($help)*--container-label-rm=[Remove a container label by its key]:label: " \ 2088 "($help)*--dns-add=[Add or update custom DNS servers]:DNS: " \ 2089 "($help)*--dns-rm=[Remove custom DNS servers]:DNS: " \ 2090 "($help)*--dns-option-add=[Add or update DNS options]:DNS option: " \ 2091 "($help)*--dns-option-rm=[Remove DNS options]:DNS option: " \ 2092 "($help)*--dns-search-add=[Add or update custom DNS search domains]:DNS search: " \ 2093 "($help)*--dns-search-rm=[Remove DNS search domains]:DNS search: " \ 2094 "($help)--force[Force update]" \ 2095 "($help)*--group-add=[Add additional supplementary user groups to the container]:group:_groups" \ 2096 "($help)*--group-rm=[Remove previously added supplementary user groups from the container]:group:_groups" \ 2097 "($help)--image=[Service image tag]:image:__docker_complete_repositories" \ 2098 "($help)*--placement-pref-add=[Add a placement preference]:pref:__docker_service_complete_placement_pref" \ 2099 "($help)*--placement-pref-rm=[Remove a placement preference]:pref:__docker_service_complete_placement_pref" \ 2100 "($help)*--publish-add=[Add or update a port]:port: " \ 2101 "($help)*--publish-rm=[Remove a port(target-port mandatory)]:port: " \ 2102 "($help)--rollback[Rollback to previous specification]" \ 2103 "($help -)1:service:__docker_complete_services" && ret=0 2104 ;; 2105 (help) 2106 _arguments $(__docker_arguments) ":subcommand:__docker_service_commands" && ret=0 2107 ;; 2108 esac 2109 2110 return ret 2111 } 2112 2113 # EO service 2114 2115 # BO stack 2116 2117 __docker_stack_complete_ps_filters() { 2118 [[ $PREFIX = -* ]] && return 1 2119 integer ret=1 2120 2121 if compset -P '*='; then 2122 case "${${words[-1]%=*}#*=}" in 2123 (desired-state) 2124 state_opts=('accepted' 'running' 'shutdown') 2125 _describe -t state-opts "desired state options" state_opts && ret=0 2126 ;; 2127 *) 2128 _message 'value' && ret=0 2129 ;; 2130 esac 2131 else 2132 opts=('desired-state' 'id' 'name') 2133 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 2134 fi 2135 2136 return ret 2137 } 2138 2139 __docker_stack_complete_services_filters() { 2140 [[ $PREFIX = -* ]] && return 1 2141 integer ret=1 2142 2143 if compset -P '*='; then 2144 case "${${words[-1]%=*}#*=}" in 2145 *) 2146 _message 'value' && ret=0 2147 ;; 2148 esac 2149 else 2150 opts=('id' 'label' 'name') 2151 _describe -t filter-opts "filter options" opts -qS "=" && ret=0 2152 fi 2153 2154 return ret 2155 } 2156 2157 __docker_stacks() { 2158 [[ $PREFIX = -* ]] && return 1 2159 integer ret=1 2160 local line s 2161 declare -a lines stacks 2162 2163 lines=(${(f)${:-"$(_call_program commands docker $docker_options stack ls)"$'\n'}}) 2164 2165 # Parse header line to find columns 2166 local i=1 j=1 k header=${lines[1]} 2167 declare -A begin end 2168 while (( j < ${#header} - 1 )); do 2169 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 2170 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 2171 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 2172 begin[${header[$i,$((j-1))]}]=$i 2173 end[${header[$i,$((j-1))]}]=$k 2174 done 2175 end[${header[$i,$((j-1))]}]=-1 2176 lines=(${lines[2,-1]}) 2177 2178 # Service NAME 2179 for line in $lines; do 2180 s="${line[${begin[NAME]},${end[NAME]}]%% ##}" 2181 stacks=($stacks $s) 2182 done 2183 2184 _describe -t stacks-list "stacks" stacks "$@" && ret=0 2185 return ret 2186 } 2187 2188 __docker_complete_stacks() { 2189 [[ $PREFIX = -* ]] && return 1 2190 __docker_stacks "$@" 2191 } 2192 2193 __docker_stack_commands() { 2194 local -a _docker_stack_subcommands 2195 _docker_stack_subcommands=( 2196 "deploy:Deploy a new stack or update an existing stack" 2197 "ls:List stacks" 2198 "ps:List the tasks in the stack" 2199 "rm:Remove the stack" 2200 "services:List the services in the stack" 2201 ) 2202 _describe -t docker-stack-commands "docker stack command" _docker_stack_subcommands 2203 } 2204 2205 __docker_stack_subcommand() { 2206 local -a _command_args opts_help 2207 local expl help="--help" 2208 integer ret=1 2209 2210 opts_help=("(: -)--help[Print usage]") 2211 2212 case "$words[1]" in 2213 (deploy|up) 2214 _arguments $(__docker_arguments) \ 2215 $opts_help \ 2216 "($help)--bundle-file=[Path to a Distributed Application Bundle file]:dab:_files -g \"*.dab\"" \ 2217 "($help -c --compose-file)"{-c=,--compose-file=}"[Path to a Compose file, or '-' to read from stdin]:compose file:_files -g \"*.(yml|yaml)\"" \ 2218 "($help)--with-registry-auth[Send registry authentication details to Swarm agents]" \ 2219 "($help -):stack:__docker_complete_stacks" && ret=0 2220 ;; 2221 (ls|list) 2222 _arguments $(__docker_arguments) \ 2223 $opts_help && ret=0 2224 ;; 2225 (ps) 2226 _arguments $(__docker_arguments) \ 2227 $opts_help \ 2228 "($help -a --all)"{-a,--all}"[Display all tasks]" \ 2229 "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:__docker_stack_complete_ps_filters" \ 2230 "($help)--format=[Format the output using the given go template]:template: " \ 2231 "($help)--no-resolve[Do not map IDs to Names]" \ 2232 "($help)--no-trunc[Do not truncate output]" \ 2233 "($help -q --quiet)"{-q,--quiet}"[Only display task IDs]" \ 2234 "($help -):stack:__docker_complete_stacks" && ret=0 2235 ;; 2236 (rm|remove|down) 2237 _arguments $(__docker_arguments) \ 2238 $opts_help \ 2239 "($help -):stack:__docker_complete_stacks" && ret=0 2240 ;; 2241 (services) 2242 _arguments $(__docker_arguments) \ 2243 $opts_help \ 2244 "($help)*"{-f=,--filter=}"[Filter output based on conditions provided]:filter:__docker_stack_complete_services_filters" \ 2245 "($help)--format=[Pretty-print services using a Go template]:template: " \ 2246 "($help -q --quiet)"{-q,--quiet}"[Only display IDs]" \ 2247 "($help -):stack:__docker_complete_stacks" && ret=0 2248 ;; 2249 (help) 2250 _arguments $(__docker_arguments) ":subcommand:__docker_stack_commands" && ret=0 2251 ;; 2252 esac 2253 2254 return ret 2255 } 2256 2257 # EO stack 2258 2259 # BO swarm 2260 2261 __docker_swarm_commands() { 2262 local -a _docker_swarm_subcommands 2263 _docker_swarm_subcommands=( 2264 "init:Initialize a swarm" 2265 "join:Join a swarm as a node and/or manager" 2266 "join-token:Manage join tokens" 2267 "leave:Leave a swarm" 2268 "unlock:Unlock swarm" 2269 "unlock-key:Manage the unlock key" 2270 "update:Update the swarm" 2271 ) 2272 _describe -t docker-swarm-commands "docker swarm command" _docker_swarm_subcommands 2273 } 2274 2275 __docker_swarm_subcommand() { 2276 local -a _command_args opts_help 2277 local expl help="--help" 2278 integer ret=1 2279 2280 opts_help=("(: -)--help[Print usage]") 2281 2282 case "$words[1]" in 2283 (init) 2284 _arguments $(__docker_arguments) \ 2285 $opts_help \ 2286 "($help)--advertise-addr=[Advertised address]:ip\:port: " \ 2287 "($help)--data-path-addr=[Data path IP or interface]:ip " \ 2288 "($help)--default-addr-pool=[Default address pool]" \ 2289 "($help)--default-addr-pool-mask-length=[Default address pool subnet mask length]" \ 2290 "($help)--autolock[Enable manager autolocking]" \ 2291 "($help)--availability=[Availability of the node]:availability:(active drain pause)" \ 2292 "($help)--cert-expiry=[Validity period for node certificates]:duration: " \ 2293 "($help)--dispatcher-heartbeat=[Dispatcher heartbeat period]:duration: " \ 2294 "($help)*--external-ca=[Specifications of one or more certificate signing endpoints]:endpoint: " \ 2295 "($help)--force-new-cluster[Force create a new cluster from current state]" \ 2296 "($help)--listen-addr=[Listen address]:ip\:port: " \ 2297 "($help)--max-snapshots[Number of additional Raft snapshots to retain]" \ 2298 "($help)--snapshot-interval[Number of log entries between Raft snapshots]" \ 2299 "($help)--task-history-limit=[Task history retention limit]:limit: " && ret=0 2300 ;; 2301 (join) 2302 _arguments $(__docker_arguments) -A '-*' \ 2303 $opts_help \ 2304 "($help)--advertise-addr=[Advertised address]:ip\:port: " \ 2305 "($help)--data-path-addr=[Data path IP or interface]:ip " \ 2306 "($help)--availability=[Availability of the node]:availability:(active drain pause)" \ 2307 "($help)--listen-addr=[Listen address]:ip\:port: " \ 2308 "($help)--token=[Token for entry into the swarm]:secret: " \ 2309 "($help -):host\:port: " && ret=0 2310 ;; 2311 (join-token) 2312 _arguments $(__docker_arguments) \ 2313 $opts_help \ 2314 "($help -q --quiet)"{-q,--quiet}"[Only display token]" \ 2315 "($help)--rotate[Rotate join token]" \ 2316 "($help -):role:(manager worker)" && ret=0 2317 ;; 2318 (leave) 2319 _arguments $(__docker_arguments) \ 2320 $opts_help \ 2321 "($help -f --force)"{-f,--force}"[Force this node to leave the swarm, ignoring warnings]" && ret=0 2322 ;; 2323 (unlock) 2324 _arguments $(__docker_arguments) \ 2325 $opts_help && ret=0 2326 ;; 2327 (unlock-key) 2328 _arguments $(__docker_arguments) \ 2329 $opts_help \ 2330 "($help -q --quiet)"{-q,--quiet}"[Only display token]" \ 2331 "($help)--rotate[Rotate unlock token]" && ret=0 2332 ;; 2333 (update) 2334 _arguments $(__docker_arguments) \ 2335 $opts_help \ 2336 "($help)--autolock[Enable manager autolocking]" \ 2337 "($help)--cert-expiry=[Validity period for node certificates]:duration: " \ 2338 "($help)--dispatcher-heartbeat=[Dispatcher heartbeat period]:duration: " \ 2339 "($help)*--external-ca=[Specifications of one or more certificate signing endpoints]:endpoint: " \ 2340 "($help)--max-snapshots[Number of additional Raft snapshots to retain]" \ 2341 "($help)--snapshot-interval[Number of log entries between Raft snapshots]" \ 2342 "($help)--task-history-limit=[Task history retention limit]:limit: " && ret=0 2343 ;; 2344 (help) 2345 _arguments $(__docker_arguments) ":subcommand:__docker_network_commands" && ret=0 2346 ;; 2347 esac 2348 2349 return ret 2350 } 2351 2352 # EO swarm 2353 2354 # BO system 2355 2356 __docker_system_commands() { 2357 local -a _docker_system_subcommands 2358 _docker_system_subcommands=( 2359 "df:Show docker filesystem usage" 2360 "events:Get real time events from the server" 2361 "info:Display system-wide information" 2362 "prune:Remove unused data" 2363 ) 2364 _describe -t docker-system-commands "docker system command" _docker_system_subcommands 2365 } 2366 2367 __docker_system_subcommand() { 2368 local -a _command_args opts_help 2369 local expl help="--help" 2370 integer ret=1 2371 2372 opts_help=("(: -)--help[Print usage]") 2373 2374 case "$words[1]" in 2375 (df) 2376 _arguments $(__docker_arguments) \ 2377 $opts_help \ 2378 "($help -v --verbose)"{-v,--verbose}"[Show detailed information on space usage]" && ret=0 2379 ;; 2380 (events) 2381 _arguments $(__docker_arguments) \ 2382 $opts_help \ 2383 "($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_events_filter" \ 2384 "($help)--since=[Events created since this timestamp]:timestamp: " \ 2385 "($help)--until=[Events created until this timestamp]:timestamp: " \ 2386 "($help)--format=[Format the output using the given go template]:template: " && ret=0 2387 ;; 2388 (info) 2389 _arguments $(__docker_arguments) \ 2390 $opts_help \ 2391 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " && ret=0 2392 ;; 2393 (prune) 2394 _arguments $(__docker_arguments) \ 2395 $opts_help \ 2396 "($help -a --all)"{-a,--all}"[Remove all unused data, not just dangling ones]" \ 2397 "($help)*--filter=[Filter values]:filter:__docker_complete_prune_filters" \ 2398 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" \ 2399 "($help)--volumes=[Remove all unused volumes]" && ret=0 2400 ;; 2401 (help) 2402 _arguments $(__docker_arguments) ":subcommand:__docker_volume_commands" && ret=0 2403 ;; 2404 esac 2405 2406 return ret 2407 } 2408 2409 # EO system 2410 2411 # BO volume 2412 2413 __docker_volume_complete_ls_filters() { 2414 [[ $PREFIX = -* ]] && return 1 2415 integer ret=1 2416 2417 if compset -P '*='; then 2418 case "${${words[-1]%=*}#*=}" in 2419 (dangling) 2420 dangling_opts=('true' 'false') 2421 _describe -t dangling-filter-opts "Dangling Filter Options" dangling_opts && ret=0 2422 ;; 2423 (driver) 2424 __docker_complete_info_plugins Volume && ret=0 2425 ;; 2426 (name) 2427 __docker_complete_volumes && ret=0 2428 ;; 2429 *) 2430 _message 'value' && ret=0 2431 ;; 2432 esac 2433 else 2434 opts=('dangling' 'driver' 'label' 'name') 2435 _describe -t filter-opts "Filter Options" opts -qS "=" && ret=0 2436 fi 2437 2438 return ret 2439 } 2440 2441 __docker_complete_volumes() { 2442 [[ $PREFIX = -* ]] && return 1 2443 integer ret=1 2444 declare -a lines volumes 2445 2446 lines=(${(f)${:-"$(_call_program commands docker $docker_options volume ls)"$'\n'}}) 2447 2448 # Parse header line to find columns 2449 local i=1 j=1 k header=${lines[1]} 2450 declare -A begin end 2451 while (( j < ${#header} - 1 )); do 2452 i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 )) 2453 j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 )) 2454 k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 )) 2455 begin[${header[$i,$((j-1))]}]=$i 2456 end[${header[$i,$((j-1))]}]=$k 2457 done 2458 end[${header[$i,$((j-1))]}]=-1 2459 lines=(${lines[2,-1]}) 2460 2461 # Names 2462 local line s 2463 for line in $lines; do 2464 s="${line[${begin[VOLUME NAME]},${end[VOLUME NAME]}]%% ##}" 2465 s="$s:${(l:7:: :::)${${line[${begin[DRIVER]},${end[DRIVER]}]}%% ##}}" 2466 volumes=($volumes $s) 2467 done 2468 2469 _describe -t volumes-list "volumes" volumes && ret=0 2470 return ret 2471 } 2472 2473 __docker_volume_commands() { 2474 local -a _docker_volume_subcommands 2475 _docker_volume_subcommands=( 2476 "create:Create a volume" 2477 "inspect:Display detailed information on one or more volumes" 2478 "ls:List volumes" 2479 "prune:Remove all unused volumes" 2480 "rm:Remove one or more volumes" 2481 ) 2482 _describe -t docker-volume-commands "docker volume command" _docker_volume_subcommands 2483 } 2484 2485 __docker_volume_subcommand() { 2486 local -a _command_args opts_help 2487 local expl help="--help" 2488 integer ret=1 2489 2490 opts_help=("(: -)--help[Print usage]") 2491 2492 case "$words[1]" in 2493 (create) 2494 _arguments $(__docker_arguments) -A '-*' \ 2495 $opts_help \ 2496 "($help -d --driver)"{-d=,--driver=}"[Volume driver name]:Driver name:(local)" \ 2497 "($help)*--label=[Set metadata for a volume]:label=value: " \ 2498 "($help)*"{-o=,--opt=}"[Driver specific options]:Driver option: " \ 2499 "($help -)1:Volume name: " && ret=0 2500 ;; 2501 (inspect) 2502 _arguments $(__docker_arguments) \ 2503 $opts_help \ 2504 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 2505 "($help -)1:volume:__docker_complete_volumes" && ret=0 2506 ;; 2507 (ls) 2508 _arguments $(__docker_arguments) \ 2509 $opts_help \ 2510 "($help)*"{-f=,--filter=}"[Provide filter values]:filter:__docker_volume_complete_ls_filters" \ 2511 "($help)--format=[Pretty-print volumes using a Go template]:template: " \ 2512 "($help -q --quiet)"{-q,--quiet}"[Only display volume names]" && ret=0 2513 ;; 2514 (prune) 2515 _arguments $(__docker_arguments) \ 2516 $opts_help \ 2517 "($help -f --force)"{-f,--force}"[Do not prompt for confirmation]" && ret=0 2518 ;; 2519 (rm) 2520 _arguments $(__docker_arguments) \ 2521 $opts_help \ 2522 "($help -f --force)"{-f,--force}"[Force the removal of one or more volumes]" \ 2523 "($help -):volume:__docker_complete_volumes" && ret=0 2524 ;; 2525 (help) 2526 _arguments $(__docker_arguments) ":subcommand:__docker_volume_commands" && ret=0 2527 ;; 2528 esac 2529 2530 return ret 2531 } 2532 2533 # EO volume 2534 2535 __docker_caching_policy() { 2536 oldp=( "$1"(Nmh+1) ) # 1 hour 2537 (( $#oldp )) 2538 } 2539 2540 __docker_commands() { 2541 local cache_policy 2542 integer force_invalidation=0 2543 2544 zstyle -s ":completion:${curcontext}:" cache-policy cache_policy 2545 if [[ -z "$cache_policy" ]]; then 2546 zstyle ":completion:${curcontext}:" cache-policy __docker_caching_policy 2547 fi 2548 2549 if ( (( ! ${+_docker_hide_legacy_commands} )) || _cache_invalid docker_hide_legacy_commands ) \ 2550 && ! _retrieve_cache docker_hide_legacy_commands; 2551 then 2552 _docker_hide_legacy_commands="${DOCKER_HIDE_LEGACY_COMMANDS}" 2553 _store_cache docker_hide_legacy_commands _docker_hide_legacy_commands 2554 fi 2555 2556 if [[ "${_docker_hide_legacy_commands}" != "${DOCKER_HIDE_LEGACY_COMMANDS}" ]]; then 2557 force_invalidation=1 2558 _docker_hide_legacy_commands="${DOCKER_HIDE_LEGACY_COMMANDS}" 2559 _store_cache docker_hide_legacy_commands _docker_hide_legacy_commands 2560 fi 2561 2562 if ( [[ ${+_docker_subcommands} -eq 0 ]] || _cache_invalid docker_subcommands ) \ 2563 && ! _retrieve_cache docker_subcommands || [[ ${force_invalidation} -eq 1 ]]; 2564 then 2565 local -a lines 2566 lines=(${(f)"$(_call_program commands docker 2>&1)"}) 2567 _docker_subcommands=(${${${(M)${lines[$((${lines[(i)*Commands:]} + 1)),-1]}:# *}## #}/ ##/:}) 2568 _docker_subcommands=($_docker_subcommands 'daemon:Enable daemon mode' 'help:Show help for a command') 2569 (( $#_docker_subcommands > 2 )) && _store_cache docker_subcommands _docker_subcommands 2570 fi 2571 _describe -t docker-commands "docker command" _docker_subcommands 2572 } 2573 2574 __docker_subcommand() { 2575 local -a _command_args opts_help 2576 local expl help="--help" 2577 integer ret=1 2578 2579 opts_help=("(: -)--help[Print usage]") 2580 2581 case "$words[1]" in 2582 (attach|commit|cp|create|diff|exec|export|kill|logs|pause|unpause|port|rename|restart|rm|run|start|stats|stop|top|update|wait) 2583 __docker_container_subcommand && ret=0 2584 ;; 2585 (build|history|import|load|pull|push|save|tag) 2586 __docker_image_subcommand && ret=0 2587 ;; 2588 (checkpoint) 2589 local curcontext="$curcontext" state 2590 _arguments $(__docker_arguments) \ 2591 $opts_help \ 2592 "($help -): :->command" \ 2593 "($help -)*:: :->option-or-argument" && ret=0 2594 2595 case $state in 2596 (command) 2597 __docker_checkpoint_commands && ret=0 2598 ;; 2599 (option-or-argument) 2600 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2601 __docker_checkpoint_subcommand && ret=0 2602 ;; 2603 esac 2604 ;; 2605 (container) 2606 local curcontext="$curcontext" state 2607 _arguments $(__docker_arguments) \ 2608 $opts_help \ 2609 "($help -): :->command" \ 2610 "($help -)*:: :->option-or-argument" && ret=0 2611 2612 case $state in 2613 (command) 2614 __docker_container_commands && ret=0 2615 ;; 2616 (option-or-argument) 2617 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2618 __docker_container_subcommand && ret=0 2619 ;; 2620 esac 2621 ;; 2622 (daemon) 2623 _arguments $(__docker_arguments) \ 2624 $opts_help \ 2625 "($help)*--add-runtime=[Register an additional OCI compatible runtime]:runtime:__docker_complete_runtimes" \ 2626 "($help)*--allow-nondistributable-artifacts=[Push nondistributable artifacts to specified registries]:registry: " \ 2627 "($help)--api-cors-header=[CORS headers in the Engine API]:CORS headers: " \ 2628 "($help)*--authorization-plugin=[Authorization plugins to load]" \ 2629 "($help -b --bridge)"{-b=,--bridge=}"[Attach containers to a network bridge]:bridge:_net_interfaces" \ 2630 "($help)--bip=[Network bridge IP]:IP address: " \ 2631 "($help)--cgroup-parent=[Parent cgroup for all containers]:cgroup: " \ 2632 "($help)--cluster-advertise=[Address or interface name to advertise]:Instance to advertise (host\:port): " \ 2633 "($help)--cluster-store=[URL of the distributed storage backend]:Cluster Store:->cluster-store" \ 2634 "($help)*--cluster-store-opt=[Cluster store options]:Cluster options:->cluster-store-options" \ 2635 "($help)--config-file=[Path to daemon configuration file]:Config File:_files" \ 2636 "($help)--containerd=[Path to containerd socket]:socket:_files -g \"*.sock\"" \ 2637 "($help)--data-root=[Root directory of persisted Docker data]:path:_directories" \ 2638 "($help -D --debug)"{-D,--debug}"[Enable debug mode]" \ 2639 "($help)--default-gateway[Container default gateway IPv4 address]:IPv4 address: " \ 2640 "($help)--default-gateway-v6[Container default gateway IPv6 address]:IPv6 address: " \ 2641 "($help)--default-shm-size=[Default shm size for containers]:size:" \ 2642 "($help)*--default-ulimit=[Default ulimits for containers]:ulimit: " \ 2643 "($help)*--dns=[DNS server to use]:DNS: " \ 2644 "($help)*--dns-opt=[DNS options to use]:DNS option: " \ 2645 "($help)*--dns-search=[DNS search domains to use]:DNS search: " \ 2646 "($help)*--exec-opt=[Runtime execution options]:runtime execution options: " \ 2647 "($help)--exec-root=[Root directory for execution state files]:path:_directories" \ 2648 "($help)--experimental[Enable experimental features]" \ 2649 "($help)--fixed-cidr=[IPv4 subnet for fixed IPs]:IPv4 subnet: " \ 2650 "($help)--fixed-cidr-v6=[IPv6 subnet for fixed IPs]:IPv6 subnet: " \ 2651 "($help -G --group)"{-G=,--group=}"[Group for the unix socket]:group:_groups" \ 2652 "($help -H --host)"{-H=,--host=}"[tcp://host:port to bind/connect to]:host: " \ 2653 "($help)--icc[Enable inter-container communication]" \ 2654 "($help)--init[Run an init inside containers to forward signals and reap processes]" \ 2655 "($help)--init-path=[Path to the docker-init binary]:docker-init binary:_files" \ 2656 "($help)*--insecure-registry=[Enable insecure registry communication]:registry: " \ 2657 "($help)--ip=[Default IP when binding container ports]" \ 2658 "($help)--ip-forward[Enable net.ipv4.ip_forward]" \ 2659 "($help)--ip-masq[Enable IP masquerading]" \ 2660 "($help)--iptables[Enable addition of iptables rules]" \ 2661 "($help)--ipv6[Enable IPv6 networking]" \ 2662 "($help -l --log-level)"{-l=,--log-level=}"[Logging level]:level:(debug info warn error fatal)" \ 2663 "($help)*--label=[Key=value labels]:label: " \ 2664 "($help)--live-restore[Enable live restore of docker when containers are still running]" \ 2665 "($help)--log-driver=[Default driver for container logs]:logging driver:__docker_complete_log_drivers" \ 2666 "($help)*--log-opt=[Default log driver options for containers]:log driver options:__docker_complete_log_options" \ 2667 "($help)--max-concurrent-downloads[Set the max concurrent downloads for each pull]" \ 2668 "($help)--max-concurrent-uploads[Set the max concurrent uploads for each push]" \ 2669 "($help)--mtu=[Network MTU]:mtu:(0 576 1420 1500 9000)" \ 2670 "($help)--oom-score-adjust=[Set the oom_score_adj for the daemon]:oom-score:(-500)" \ 2671 "($help -p --pidfile)"{-p=,--pidfile=}"[Path to use for daemon PID file]:PID file:_files" \ 2672 "($help)--raw-logs[Full timestamps without ANSI coloring]" \ 2673 "($help)*--registry-mirror=[Preferred Docker registry mirror]:registry mirror: " \ 2674 "($help)--seccomp-profile=[Path to seccomp profile]:path:_files -g \"*.json\"" \ 2675 "($help -s --storage-driver)"{-s=,--storage-driver=}"[Storage driver to use]:driver:(aufs btrfs devicemapper overlay overlay2 vfs zfs)" \ 2676 "($help)--selinux-enabled[Enable selinux support]" \ 2677 "($help)--shutdown-timeout=[Set the shutdown timeout value in seconds]:time: " \ 2678 "($help)*--storage-opt=[Storage driver options]:storage driver options: " \ 2679 "($help)--tls[Use TLS]" \ 2680 "($help)--tlscacert=[Trust certs signed only by this CA]:PEM file:_files -g \"*.(pem|crt)\"" \ 2681 "($help)--tlscert=[Path to TLS certificate file]:PEM file:_files -g \"*.(pem|crt)\"" \ 2682 "($help)--tlskey=[Path to TLS key file]:Key file:_files -g \"*.(pem|key)\"" \ 2683 "($help)--tlsverify[Use TLS and verify the remote]" \ 2684 "($help)--userns-remap=[User/Group setting for user namespaces]:user\:group:->users-groups" \ 2685 "($help)--userland-proxy[Use userland proxy for loopback traffic]" \ 2686 "($help)--userland-proxy-path=[Path to the userland proxy binary]:binary:_files" && ret=0 2687 2688 case $state in 2689 (cluster-store) 2690 if compset -P '*://'; then 2691 _message 'host:port' && ret=0 2692 else 2693 store=('consul' 'etcd' 'zk') 2694 _describe -t cluster-store "Cluster Store" store -qS "://" && ret=0 2695 fi 2696 ;; 2697 (cluster-store-options) 2698 if compset -P '*='; then 2699 _files && ret=0 2700 else 2701 opts=('discovery.heartbeat' 'discovery.ttl' 'kv.cacertfile' 'kv.certfile' 'kv.keyfile' 'kv.path') 2702 _describe -t cluster-store-opts "Cluster Store Options" opts -qS "=" && ret=0 2703 fi 2704 ;; 2705 (users-groups) 2706 if compset -P '*:'; then 2707 _groups && ret=0 2708 else 2709 _describe -t userns-default "default Docker user management" '(default)' && ret=0 2710 _users && ret=0 2711 fi 2712 ;; 2713 esac 2714 ;; 2715 (events|info) 2716 __docker_system_subcommand && ret=0 2717 ;; 2718 (image) 2719 local curcontext="$curcontext" state 2720 _arguments $(__docker_arguments) \ 2721 $opts_help \ 2722 "($help -): :->command" \ 2723 "($help -)*:: :->option-or-argument" && ret=0 2724 2725 case $state in 2726 (command) 2727 __docker_image_commands && ret=0 2728 ;; 2729 (option-or-argument) 2730 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2731 __docker_image_subcommand && ret=0 2732 ;; 2733 esac 2734 ;; 2735 (images) 2736 words[1]='ls' 2737 __docker_image_subcommand && ret=0 2738 ;; 2739 (inspect) 2740 local state 2741 _arguments $(__docker_arguments) \ 2742 $opts_help \ 2743 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \ 2744 "($help -s --size)"{-s,--size}"[Display total file sizes if the type is container]" \ 2745 "($help)--type=[Return JSON for specified type]:type:(container image network node plugin service volume)" \ 2746 "($help -)*: :->values" && ret=0 2747 2748 case $state in 2749 (values) 2750 if [[ ${words[(r)--type=container]} == --type=container ]]; then 2751 __docker_complete_containers && ret=0 2752 elif [[ ${words[(r)--type=image]} == --type=image ]]; then 2753 __docker_complete_images && ret=0 2754 elif [[ ${words[(r)--type=network]} == --type=network ]]; then 2755 __docker_complete_networks && ret=0 2756 elif [[ ${words[(r)--type=node]} == --type=node ]]; then 2757 __docker_complete_nodes && ret=0 2758 elif [[ ${words[(r)--type=plugin]} == --type=plugin ]]; then 2759 __docker_complete_plugins && ret=0 2760 elif [[ ${words[(r)--type=service]} == --type=secrets ]]; then 2761 __docker_complete_secrets && ret=0 2762 elif [[ ${words[(r)--type=service]} == --type=service ]]; then 2763 __docker_complete_services && ret=0 2764 elif [[ ${words[(r)--type=volume]} == --type=volume ]]; then 2765 __docker_complete_volumes && ret=0 2766 else 2767 __docker_complete_containers 2768 __docker_complete_images 2769 __docker_complete_networks 2770 __docker_complete_nodes 2771 __docker_complete_plugins 2772 __docker_complete_secrets 2773 __docker_complete_services 2774 __docker_complete_volumes && ret=0 2775 fi 2776 ;; 2777 esac 2778 ;; 2779 (login) 2780 _arguments $(__docker_arguments) -A '-*' \ 2781 $opts_help \ 2782 "($help -p --password)"{-p=,--password=}"[Password]:password: " \ 2783 "($help)--password-stdin[Read password from stdin]" \ 2784 "($help -u --user)"{-u=,--user=}"[Username]:username: " \ 2785 "($help -)1:server: " && ret=0 2786 ;; 2787 (logout) 2788 _arguments $(__docker_arguments) -A '-*' \ 2789 $opts_help \ 2790 "($help -)1:server: " && ret=0 2791 ;; 2792 (network) 2793 local curcontext="$curcontext" state 2794 _arguments $(__docker_arguments) \ 2795 $opts_help \ 2796 "($help -): :->command" \ 2797 "($help -)*:: :->option-or-argument" && ret=0 2798 2799 case $state in 2800 (command) 2801 __docker_network_commands && ret=0 2802 ;; 2803 (option-or-argument) 2804 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2805 __docker_network_subcommand && ret=0 2806 ;; 2807 esac 2808 ;; 2809 (node) 2810 local curcontext="$curcontext" state 2811 _arguments $(__docker_arguments) \ 2812 $opts_help \ 2813 "($help -): :->command" \ 2814 "($help -)*:: :->option-or-argument" && ret=0 2815 2816 case $state in 2817 (command) 2818 __docker_node_commands && ret=0 2819 ;; 2820 (option-or-argument) 2821 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2822 __docker_node_subcommand && ret=0 2823 ;; 2824 esac 2825 ;; 2826 (plugin) 2827 local curcontext="$curcontext" state 2828 _arguments $(__docker_arguments) \ 2829 $opts_help \ 2830 "($help -): :->command" \ 2831 "($help -)*:: :->option-or-argument" && ret=0 2832 2833 case $state in 2834 (command) 2835 __docker_plugin_commands && ret=0 2836 ;; 2837 (option-or-argument) 2838 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2839 __docker_plugin_subcommand && ret=0 2840 ;; 2841 esac 2842 ;; 2843 (ps) 2844 words[1]='ls' 2845 __docker_container_subcommand && ret=0 2846 ;; 2847 (rmi) 2848 words[1]='rm' 2849 __docker_image_subcommand && ret=0 2850 ;; 2851 (search) 2852 _arguments $(__docker_arguments) -A '-*' \ 2853 $opts_help \ 2854 "($help)*"{-f=,--filter=}"[Filter values]:filter:__docker_complete_search_filters" \ 2855 "($help)--limit=[Maximum returned search results]:limit:(1 5 10 25 50)" \ 2856 "($help)--no-trunc[Do not truncate output]" \ 2857 "($help -):term: " && ret=0 2858 ;; 2859 (secret) 2860 local curcontext="$curcontext" state 2861 _arguments $(__docker_arguments) \ 2862 $opts_help \ 2863 "($help -): :->command" \ 2864 "($help -)*:: :->option-or-argument" && ret=0 2865 2866 case $state in 2867 (command) 2868 __docker_secret_commands && ret=0 2869 ;; 2870 (option-or-argument) 2871 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2872 __docker_secret_subcommand && ret=0 2873 ;; 2874 esac 2875 ;; 2876 (service) 2877 local curcontext="$curcontext" state 2878 _arguments $(__docker_arguments) \ 2879 $opts_help \ 2880 "($help -): :->command" \ 2881 "($help -)*:: :->option-or-argument" && ret=0 2882 2883 case $state in 2884 (command) 2885 __docker_service_commands && ret=0 2886 ;; 2887 (option-or-argument) 2888 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2889 __docker_service_subcommand && ret=0 2890 ;; 2891 esac 2892 ;; 2893 (stack) 2894 local curcontext="$curcontext" state 2895 _arguments $(__docker_arguments) \ 2896 $opts_help \ 2897 "($help -): :->command" \ 2898 "($help -)*:: :->option-or-argument" && ret=0 2899 2900 case $state in 2901 (command) 2902 __docker_stack_commands && ret=0 2903 ;; 2904 (option-or-argument) 2905 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2906 __docker_stack_subcommand && ret=0 2907 ;; 2908 esac 2909 ;; 2910 (swarm) 2911 local curcontext="$curcontext" state 2912 _arguments $(__docker_arguments) \ 2913 $opts_help \ 2914 "($help -): :->command" \ 2915 "($help -)*:: :->option-or-argument" && ret=0 2916 2917 case $state in 2918 (command) 2919 __docker_swarm_commands && ret=0 2920 ;; 2921 (option-or-argument) 2922 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2923 __docker_swarm_subcommand && ret=0 2924 ;; 2925 esac 2926 ;; 2927 (system) 2928 local curcontext="$curcontext" state 2929 _arguments $(__docker_arguments) \ 2930 $opts_help \ 2931 "($help -): :->command" \ 2932 "($help -)*:: :->option-or-argument" && ret=0 2933 2934 case $state in 2935 (command) 2936 __docker_system_commands && ret=0 2937 ;; 2938 (option-or-argument) 2939 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2940 __docker_system_subcommand && ret=0 2941 ;; 2942 esac 2943 ;; 2944 (version) 2945 _arguments $(__docker_arguments) \ 2946 $opts_help \ 2947 "($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " && ret=0 2948 ;; 2949 (volume) 2950 local curcontext="$curcontext" state 2951 _arguments $(__docker_arguments) \ 2952 $opts_help \ 2953 "($help -): :->command" \ 2954 "($help -)*:: :->option-or-argument" && ret=0 2955 2956 case $state in 2957 (command) 2958 __docker_volume_commands && ret=0 2959 ;; 2960 (option-or-argument) 2961 curcontext=${curcontext%:*:*}:docker-${words[-1]}: 2962 __docker_volume_subcommand && ret=0 2963 ;; 2964 esac 2965 ;; 2966 (help) 2967 _arguments $(__docker_arguments) ":subcommand:__docker_commands" && ret=0 2968 ;; 2969 esac 2970 2971 return ret 2972 } 2973 2974 _docker() { 2975 # Support for subservices, which allows for `compdef _docker docker-shell=_docker_containers`. 2976 # Based on /usr/share/zsh/functions/Completion/Unix/_git without support for `ret`. 2977 if [[ $service != docker ]]; then 2978 _call_function - _$service 2979 return 2980 fi 2981 2982 local curcontext="$curcontext" state line help="-h --help" 2983 integer ret=1 2984 typeset -A opt_args 2985 2986 _arguments $(__docker_arguments) -C \ 2987 "(: -)"{-h,--help}"[Print usage]" \ 2988 "($help)--config[Location of client config files]:path:_directories" \ 2989 "($help -D --debug)"{-D,--debug}"[Enable debug mode]" \ 2990 "($help -H --host)"{-H=,--host=}"[tcp://host:port to bind/connect to]:host: " \ 2991 "($help -l --log-level)"{-l=,--log-level=}"[Logging level]:level:(debug info warn error fatal)" \ 2992 "($help)--tls[Use TLS]" \ 2993 "($help)--tlscacert=[Trust certs signed only by this CA]:PEM file:_files -g "*.(pem|crt)"" \ 2994 "($help)--tlscert=[Path to TLS certificate file]:PEM file:_files -g "*.(pem|crt)"" \ 2995 "($help)--tlskey=[Path to TLS key file]:Key file:_files -g "*.(pem|key)"" \ 2996 "($help)--tlsverify[Use TLS and verify the remote]" \ 2997 "($help)--userland-proxy[Use userland proxy for loopback traffic]" \ 2998 "($help -v --version)"{-v,--version}"[Print version information and quit]" \ 2999 "($help -): :->command" \ 3000 "($help -)*:: :->option-or-argument" && ret=0 3001 3002 local host=${opt_args[-H]}${opt_args[--host]} 3003 local config=${opt_args[--config]} 3004 local docker_options="${host:+--host $host} ${config:+--config $config}" 3005 3006 case $state in 3007 (command) 3008 __docker_commands && ret=0 3009 ;; 3010 (option-or-argument) 3011 curcontext=${curcontext%:*:*}:docker-$words[1]: 3012 __docker_subcommand && ret=0 3013 ;; 3014 esac 3015 3016 return ret 3017 } 3018 3019 _dockerd() { 3020 integer ret=1 3021 words[1]='daemon' 3022 __docker_subcommand && ret=0 3023 return ret 3024 } 3025 3026 _docker "$@" 3027 3028 # Local Variables: 3029 # mode: Shell-Script 3030 # sh-indentation: 4 3031 # indent-tabs-mode: nil 3032 # sh-basic-offset: 4 3033 # End: 3034 # vim: ft=zsh sw=4 ts=4 et