257 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
