mirror of https://github.com/docker/cli.git
Add zsh completion for 'docker node' commands
Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>
This commit is contained in:
parent
8e2c3efc58
commit
825b9a3b33
|
@ -630,6 +630,224 @@ __docker_network_subcommand() {
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# BO node
|
||||||
|
|
||||||
|
__docker_node_complete_ls_filters() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
integer ret=1
|
||||||
|
|
||||||
|
if compset -P '*='; then
|
||||||
|
case "${${words[-1]%=*}#*=}" in
|
||||||
|
(id)
|
||||||
|
__docker_complete_nodes_ids && ret=0
|
||||||
|
;;
|
||||||
|
(membership)
|
||||||
|
membership_opts=('accepted' 'pending' 'rejected')
|
||||||
|
_describe -t membership-opts "membership options" membership_opts && ret=0
|
||||||
|
;;
|
||||||
|
(name)
|
||||||
|
__docker_complete_nodes_names && ret=0
|
||||||
|
;;
|
||||||
|
(role)
|
||||||
|
role_opts=('manager' 'worker')
|
||||||
|
_describe -t role-opts "role options" role_opts && ret=0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
_message 'value' && ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
opts=('id' 'label' 'membership' 'name' 'role')
|
||||||
|
_describe -t filter-opts "filter options" opts -qS "=" && ret=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_node_complete_tasks_filters() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
integer ret=1
|
||||||
|
|
||||||
|
if compset -P '*='; then
|
||||||
|
case "${${words[-1]%=*}#*=}" in
|
||||||
|
(desired-state)
|
||||||
|
state_opts=('accepted' 'running')
|
||||||
|
_describe -t state-opts "desired state options" state_opts && ret=0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
_message 'value' && ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
opts=('desired-state' 'id' 'label' 'name')
|
||||||
|
_describe -t filter-opts "filter options" opts -qS "=" && ret=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_nodes() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
integer ret=1
|
||||||
|
local line s
|
||||||
|
declare -a lines nodes args
|
||||||
|
|
||||||
|
type=$1; shift
|
||||||
|
filter=$1; shift
|
||||||
|
[[ $filter != "none") ]] && args=("-f $filter")
|
||||||
|
|
||||||
|
lines=(${(f)"$(_call_program commands docker $docker_options node ls $args)"})
|
||||||
|
|
||||||
|
# Parse header line to find columns
|
||||||
|
local i=1 j=1 k header=${lines[1]}
|
||||||
|
declare -A begin end
|
||||||
|
while (( j < ${#header} - 1 )); do
|
||||||
|
i=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 1 ))
|
||||||
|
j=$(( i + ${${header[$i,-1]}[(i) ]} - 1 ))
|
||||||
|
k=$(( j + ${${header[$j,-1]}[(i)[^ ]]} - 2 ))
|
||||||
|
begin[${header[$i,$((j-1))]}]=$i
|
||||||
|
end[${header[$i,$((j-1))]}]=$k
|
||||||
|
done
|
||||||
|
end[${header[$i,$((j-1))]}]=-1
|
||||||
|
lines=(${lines[2,-1]})
|
||||||
|
|
||||||
|
# Node ID
|
||||||
|
if [[ $type = (ids|all) ]]; then
|
||||||
|
for line in $lines; do
|
||||||
|
s="${line[${begin[ID]},${end[ID]}]%% ##}"
|
||||||
|
nodes=($nodes $s)
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Names
|
||||||
|
if [[ $type = (names|all) ]]; then
|
||||||
|
for line in $lines; do
|
||||||
|
s="${line[${begin[NAME]},${end[NAME]}]%% ##}"
|
||||||
|
nodes=($nodes $s)
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
_describe -t nodes-list "nodes" nodes "$@" && ret=0
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_complete_nodes() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
__docker_nodes all none "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_complete_nodes_ids() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
__docker_nodes ids none "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_complete_nodes_names() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
__docker_nodes names none "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_complete_pending_nodes() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
__docker_nodes all "membership=pending" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_complete_manager_nodes() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
__docker_nodes all "role=manager" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_complete_worker_nodes() {
|
||||||
|
[[ $PREFIX = -* ]] && return 1
|
||||||
|
__docker_nodes all "role=worker" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_node_commands() {
|
||||||
|
local -a _docker_node_subcommands
|
||||||
|
_docker_node_subcommands=(
|
||||||
|
"accept:Accept a node in the swarm"
|
||||||
|
"demote:Demote a node as manager in the swarm"
|
||||||
|
"inspect:Display detailed information on one or more nodes"
|
||||||
|
"ls:List nodes in the swarm"
|
||||||
|
"promote:Promote a node as manager in the swarm"
|
||||||
|
"rm:Remove a node from the swarm"
|
||||||
|
"tasks:List tasks running on a node"
|
||||||
|
"update:Update a node"
|
||||||
|
)
|
||||||
|
_describe -t docker-node-commands "docker node command" _docker_node_subcommands
|
||||||
|
}
|
||||||
|
|
||||||
|
__docker_node_subcommand() {
|
||||||
|
local -a _command_args opts_help
|
||||||
|
local expl help="--help"
|
||||||
|
integer ret=1
|
||||||
|
|
||||||
|
opts_help=("(: -)--help[Print usage]")
|
||||||
|
|
||||||
|
case "$words[1]" in
|
||||||
|
(accept|rm|remove)
|
||||||
|
_arguments $(__docker_arguments) \
|
||||||
|
$opts_help \
|
||||||
|
"($help -)*:node:__docker_complete_pending_nodes" && ret=0
|
||||||
|
;;
|
||||||
|
(demote)
|
||||||
|
_arguments $(__docker_arguments) \
|
||||||
|
$opts_help \
|
||||||
|
"($help -)*:node:__docker_complete_manager_nodes" && ret=0
|
||||||
|
;;
|
||||||
|
(inspect)
|
||||||
|
_arguments $(__docker_arguments) \
|
||||||
|
$opts_help \
|
||||||
|
"($help -f --format)"{-f=,--format=}"[Format the output using the given go template]:template: " \
|
||||||
|
"($help -p --pretty)"{-p,--pretty}"[Print the information in a human friendly format]" \
|
||||||
|
"($help -)*:node:__docker_complete_nodes" && ret=0
|
||||||
|
;;
|
||||||
|
(ls|list)
|
||||||
|
_arguments $(__docker_arguments) \
|
||||||
|
$opts_help \
|
||||||
|
"($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \
|
||||||
|
"($help -q --quiet)"{-q,--quiet}"[Only display IDs]" && ret=0
|
||||||
|
case $state in
|
||||||
|
(filter-options)
|
||||||
|
__docker_node_complete_ls_filters && ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
(promote)
|
||||||
|
_arguments $(__docker_arguments) \
|
||||||
|
$opts_help \
|
||||||
|
"($help -)*:node:__docker_complete_worker_nodes" && ret=0
|
||||||
|
;;
|
||||||
|
(tasks)
|
||||||
|
_arguments $(__docker_arguments) \
|
||||||
|
$opts_help \
|
||||||
|
"($help -a --all)"{-a,--all}"[Display all instances]" \
|
||||||
|
"($help)*"{-f=,--filter=}"[Provide filter values]:filter:->filter-options" \
|
||||||
|
"($help -n --no-resolve)"{-n,--no-resolve}"[Do not map IDs to Names]" \
|
||||||
|
"($help -)1:node:__docker_complete_nodes" && ret=0
|
||||||
|
case $state in
|
||||||
|
(filter-options)
|
||||||
|
__docker_node_complete_tasks_filters && ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
(update)
|
||||||
|
_arguments $(__docker_arguments) \
|
||||||
|
$opts_help \
|
||||||
|
"($help)--availability=[Availability of the node]:availability:(active pause drain)" \
|
||||||
|
"($help)--membership=[Membership of the node]:membership:(accepted rejected)" \
|
||||||
|
"($help)--role=[Role of the node]:role:(manager worker)" \
|
||||||
|
"($help -)1:node:__docker_complete_nodes" && ret=0
|
||||||
|
;;
|
||||||
|
(help)
|
||||||
|
_arguments $(__docker_arguments) ":subcommand:__docker_node_commands" && ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
# EO node
|
||||||
|
|
||||||
__docker_volume_complete_ls_filters() {
|
__docker_volume_complete_ls_filters() {
|
||||||
[[ $PREFIX = -* ]] && return 1
|
[[ $PREFIX = -* ]] && return 1
|
||||||
integer ret=1
|
integer ret=1
|
||||||
|
@ -1162,6 +1380,23 @@ __docker_subcommand() {
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
(node)
|
||||||
|
local curcontext="$curcontext" state
|
||||||
|
_arguments $(__docker_arguments) \
|
||||||
|
$opts_help \
|
||||||
|
"($help -): :->command" \
|
||||||
|
"($help -)*:: :->option-or-argument" && ret=0
|
||||||
|
|
||||||
|
case $state in
|
||||||
|
(command)
|
||||||
|
__docker_node_commands && ret=0
|
||||||
|
;;
|
||||||
|
(option-or-argument)
|
||||||
|
curcontext=${curcontext%:*:*}:docker-${words[-1]}:
|
||||||
|
__docker_node_subcommand && ret=0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
(pause|unpause)
|
(pause|unpause)
|
||||||
_arguments $(__docker_arguments) \
|
_arguments $(__docker_arguments) \
|
||||||
$opts_help \
|
$opts_help \
|
||||||
|
|
Loading…
Reference in New Issue