Last active
December 20, 2021 17:44
-
-
Save raffraffraff/a4267978fe67fb9316393b8f0589b2b2 to your computer and use it in GitHub Desktop.
bash completion for k3d
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Bash completion script for k3d, because I couldn't find one. Do what you want with it. | |
# If you're using zsh, this script should work as long as you have these lines in .zshrc: | |
# | |
# autoload bashcompinit | |
# bashcompinit | |
# source /path/to/your/bash_completion_file | |
# | |
# functions to grab k3d clusters info [would be nice if k3d list had a simple mode for grabbing names] | |
__started-k3d-clusters () | |
{ | |
k3d list | sed '1,3d;$d' | awk -F'|' '$4 == " running " {gsub(" ","");print $2}' | |
} | |
__stopped-k3d-clusters () | |
{ | |
k3d list | sed '1,3d;$d' | awk -F'|' '$4 == " stopped " {gsub(" ","");print $2}' | |
} | |
__all-k3d-clusters () | |
{ | |
k3d list | sed '1,3d;$d' | awk -F'|' '{gsub(" ","");print $2}' | |
} | |
# function to check if an opt is already in COMP_WORDS | |
__check_existing_compword () | |
{ | |
for option in ${COMP_WORDS[*]}; do | |
if [ "$1" == "$option" ]; then | |
return 1 | |
fi | |
done | |
return 0 | |
} | |
# function to lookup command opts and remove duplicates | |
__k3d_command_opts () | |
{ | |
local opt opts_var complete command complete | |
command=${COMP_WORDS[1]} | |
# translate short commands into full commands | |
case $command in | |
c) command="create";; | |
d|del) command="delete";; | |
l|ls) command="list";; | |
i) command="import-images";; | |
ct) command="check-tools";; | |
esac | |
opts_var="${command//-/_}_opts" | |
eval opts_string='$'"$opts_var" | |
# opts_string="${!opts_var}" < does not work in zsh | |
complete=() | |
for opt in $opts_string; do | |
__check_existing_compword "${opt}" | |
if [ $? -eq 0 ]; then | |
complete+=("$opt") | |
fi | |
done | |
echo "${complete[*]}" | |
} | |
# Main k3d completion function | |
__k3d_complete () | |
{ | |
local cur dashoptions prev param | |
COMPREPLY=() | |
cur="${COMP_WORDS[COMP_CWORD]}" | |
prev="${COMP_WORDS[COMP_CWORD-1]}" | |
# default options | |
dashoptions='-h --help -v --version --verbose --timestamp' | |
k3d_commands='check-tools shell create add-node delete stop start list get-kubeconfig import-images version help' | |
# command specific options | |
shell_opts='--name --command --shell' | |
create_opts='--name --volume --port --port-auto-offset --api-port --wait --image --server-arg --agent-arg --env --label --workers --auto-restart --enable-registry --registry-name --registry-port --registries-file' | |
add_node_opts='--role --name --count --image --arg --env --volume --k3s --k3s-secret --k3s-token' | |
delete_opts='--name --all --prune' | |
stop_opts='--name --all' | |
start_opts='--name --all' | |
get_kubeconfig_opts='--name --all --overwrite' | |
import_images_opts='--name --no-remove' | |
# commands with no options | |
version_opts='' | |
help_opts='' | |
list_opts='' | |
case "$prev" in | |
k3d) | |
COMPREPLY=( $( compgen -W "$k3d_commands" -- $cur ) ) | |
return 0 | |
;; | |
check-tools | shell | create | add-node | delete | stop | start | list | get-kubeconfig | import-images) | |
COMPREPLY=( $(compgen -W "$(__k3d_command_opts)" -- $cur ) ) | |
return 0 | |
;; | |
--name | -n) | |
case ${COMP_WORDS[1]} in | |
start) | |
# show stopped clusters | |
COMPREPLY=( $( compgen -W "$(__stopped-k3d-clusters)" -- $cur ) ) | |
return 0 | |
;; | |
stop) | |
# show stopped clusters | |
COMPREPLY=( $( compgen -W "$(__started-k3d-clusters)" -- $cur ) ) | |
return 0 | |
;; | |
create|c) | |
# sorry, can't help you here | |
return 0 | |
;; | |
*) | |
# show stopped clusters | |
COMPREPLY=( $( compgen -W "$(__all-k3d-clusters)" -- $cur ) ) | |
return 0 | |
;; | |
esac | |
;; | |
--wait | -t) | |
COMPREPLY=( $( compgen -W "-1 15 30 60 120" -- $cur ) ) | |
return 0 | |
;; | |
--workers | -w) | |
COMPREPLY=( $( compgen -W "2 4 8" -- $cur ) ) | |
return 0 | |
;; | |
--registry-name) | |
COMPREPLY=( $( compgen -W "registry.local" -- $cur ) ) | |
return 0 | |
;; | |
--registry-port) | |
COMPREPLY=( $( compgen -W "5000" -- $cur ) ) | |
return 0 | |
;; | |
--api-port | -a) | |
COMPREPLY=( $( compgen -W "6443" -- $cur ) ) | |
return 0 | |
;; | |
--port | -p) | |
return 0 # we do not guess port config | |
;; | |
--volume | -v) | |
case "$cur" in | |
*:*) return 0 | |
;; | |
'') | |
COMPREPLY=($( compgen -W '/' -- "$cur" )) | |
type compopt &>/dev/null && compopt -o nospace | |
return 0 | |
;; | |
/*) | |
COMPREPLY=($( compgen -f -X '/' -- "$cur" )) | |
type compopt &>/dev/null && compopt -o nospace | |
return 0 | |
;; | |
esac; | |
return 0 | |
COMPREPLY=( $( compgen -d -X -- $cur ) ) | |
return 0 | |
;; | |
esac | |
case "$cur" in | |
*) COMPREPLY=( $(compgen -W "$(__k3d_command_opts)" -- $cur ) ) | |
return 0 | |
;; | |
esac | |
return 0 | |
} | |
complete -F __k3d_complete k3d |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment