fluke/devops-client/completion/devops_complete.sh
GGA Software Services LLC 02bf8b1bba initial commit
2014-05-08 17:06:06 +04:00

257 lines
3.8 KiB
Bash

_devops()
{
local cur prev cmds cmd
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
PROVIDERS="ec2 openstack"
grant=""
project="create delete list servers set show update add_user remove_user"
server="bootstrap create delete list pause show unpause add"
declare -A commands=( [flavor]=1 [group]=1 [image]=1 [project]=0 [server]=0 [deploy]=1 [key]=1 [user]=1 [grant]=0 [tag]=1 [provider]=1 [network]=1 [script]=1 )
case "${COMP_CWORD}" in
1)
#cmds="${!commands[@]}"
#cmds="--help --version --completion"
cmds=""
if [[ "$cur" =~ ^-.* ]]; then
_devops_options
else
for i in "${!commands[@]}"
do
if [ ${commands[$i]} -eq 1 ]; then
cmds="$cmds $i"
fi
done
_set_devops_params
fi
;;
*)
if [ ${commands[${COMP_WORDS[1]}]} -ne 1 ]; then
# invalid command
return
fi
eval _devops_${COMP_WORDS[1]} ${COMP_WORDS[@]:2}
;;
esac
# case "$cmds" in
# PROVIDERS)
# cmds=$PROVIDERS
# ;;
# FILE)
# COMPREPLY=($(compgen -f "${COMP_WORDS[${COMP_CWORD}]}" ))
# return 0
# ;;
# esac
# COMPREPLY=( $(compgen -W "${cmds}" -- ${cur}) )
return 0
}
_devops_flavor()
{
case "$1" in
list)
case "$2" in
ec2|openstack)
_devops_options ""
;;
*)
_set_devops_params_providers
;;
esac
;;
*)
cmds="list"
_set_devops_params
;;
esac
}
alias _devops_group=_devops_flavor
alias _devops_network=_devops_flavor
_devops_provider()
{
case "$1" in
list)
case "$2" in
*)
_devops_options ""
;;
esac
;;
*)
cmds="list"
_set_devops_params
;;
esac
}
_devops_deploy()
{
cmds="NODE_NAME"
_set_devops_params
}
_devops_user()
{
case "$1" in
list)
;;
create)
;;
delete)
;;
grant)
;;
password)
;;
*)
cmds="create delete grant list password"
_set_devops_params
;;
esac
}
_devops_tag()
{
case "$1" in
list)
;;
create)
;;
delete)
;;
*)
cmds="create delete list"
_set_devops_params
;;
esac
}
_devops_key()
{
case "$1" in
list)
;;
add)
;;
delete)
;;
*)
cmds="add delete list"
_set_devops_params
;;
esac
}
_devops_image()
{
case "$1" in
list)
case "$2" in
provider)
case "$3" in
ec2|openstack)
_devops_options ""
;;
*)
_set_devops_params_providers
;;
esac
;;
*)
cmds="provider"
_set_devops_params
;;
esac
;;
create)
_devops_options
;;
update)
if [[ "$2" == "" ]]; then
cmds="IMAGE"
_set_devops_params
else
if [[ $COMP_CWORD -eq 4 ]]; then
_set_devops_params_file
else
_devops_options ""
fi
fi
;;
delete|show)
if [[ "$2" == "" ]]; then
cmds="IMAGE"
_set_devops_params
else
_devops_options ""
fi
;;
*)
cmds="create delete list show update"
_set_devops_params
;;
esac
}
_devops_script()
{
case "$1" in
list)
;;
add)
;;
run)
;;
delete)
;;
command)
;;
*)
cmds="list add delete run command"
_set_devops_params
;;
esac
}
_devops_options()
{
declare -A common_options=([--help]="" [--version]="" [--host]="HOST" [--api]="API" [--user]="USER" [--format]="table json" [--completion]="")
val="${common_options[${COMP_WORDS[COMP_CWORD - 1]}]}"
if [ -z "$val" ]; then
cmds="${!common_options[@]}"
else
cmds="$val"
fi
_set_devops_params
}
# set copmletion providers
_set_devops_params_providers()
{
cmds="ec2 openstack"
_set_devops_params
}
# set copmletion from $cmds
_set_devops_params()
{
COMPREPLY=( $(compgen -W "${cmds}" -- ${cur}) )
}
# set copmletion if type is FILE
_set_devops_params_file()
{
COMPREPLY=($(compgen -f "${COMP_WORDS[${COMP_CWORD}]}" ))
}
complete -o filenames -o bashdefault -F _devops devops