Add zsh completion for 'docker node' commands
Signed-off-by: Steve Durrheimer <s.durrheimer@gmail.com>
This commit is contained in:
parent
3b6bd66cc9
commit
024698718f
1 changed files with 235 additions and 0 deletions
|
@ -630,6 +630,224 @@ __docker_network_subcommand() {
|
|||
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() {
|
||||
[[ $PREFIX = -* ]] && return 1
|
||||
integer ret=1
|
||||
|
@ -1162,6 +1380,23 @@ __docker_subcommand() {
|
|||
;;
|
||||
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)
|
||||
_arguments $(__docker_arguments) \
|
||||
$opts_help \
|
||||
|
|
Loading…
Reference in a new issue