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 |