119 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| DIR=$(readlink -f "$(dirname ${BASH_SOURCE[0]})/../..")
 | |
| OB_DO_GLOBAL_CONFIG=~/.ob_do_global
 | |
| [[ -f $OB_DO_GLOBAL_CONFIG ]] && source $OB_DO_GLOBAL_CONFIG
 | |
| export DEPLOY_PATH=$DIR/tools/deploy
 | |
| export OBD_FORCE_UPDATE_PLUGINS=1
 | |
| if grep 'dep_create.sh' $DIR/build.sh 2>&1 >/dev/null
 | |
| then
 | |
|     export DEP_PATH=$DIR/deps/3rd
 | |
| else
 | |
|     export DEP_PATH=$DIR/rpm/.dep_create/var
 | |
| fi
 | |
| export OBD_BIN=${_OBD_BIN:-$DEP_PATH/usr/bin/obd}
 | |
| alias obd="${OBD_BIN}"
 | |
| export OBD_HOME=${_OBD_HOME:-$DIR/tools/deploy}
 | |
| export OBD_INSTALL_PRE=${_OBD_INSTALL_PRE:-$DEP_PATH}
 | |
| export OBD_PORT_GEN=$((100*($(id -u)%500)+10000))
 | |
| 
 | |
| if [ ${_OBD_PROFILE} ]; then
 | |
|     source ${_OBD_PROFILE}
 | |
| fi
 | |
| 
 | |
| if [ -f $OBD_INSTALL_PRE/etc/profile.d/obd.sh ] 
 | |
| then
 | |
|   source $OBD_INSTALL_PRE/etc/profile.d/obd.sh 
 | |
| fi
 | |
| if [[ "${OB_DO_NO_GLOBAL_CLUSTER:-0}" == "0" ]]; then
 | |
|     obd_dev=${OBD_HOME_GLOBAL:-~/.obd_dev}
 | |
|     mkdir -p $obd_dev/cluster
 | |
|     mkdir -p $OBD_HOME/.obd
 | |
|     [ ! -d $OBD_HOME/.obd/cluster ] && ln -fs $obd_dev/cluster $OBD_HOME/.obd
 | |
| fi
 | |
| 
 | |
| if [ -n "$BASH_VERSION" ]; then
 | |
|     complete -F _obd_sh_complete_func ./obd.sh
 | |
| fi
 | |
| 
 | |
| function _obd_sh_reply_deploy_names() {
 | |
|     if [[ -d $OBD_HOME/.obd/cluster ]]
 | |
|     then
 | |
|     res=$(ls -p $OBD_HOME/.obd/cluster 2>/dev/null | sed "s#/##")
 | |
|     COMPREPLY=( $(compgen -o filenames -W "${res}" -- ${cur}) )
 | |
|     fi
 | |
| }
 | |
| 
 | |
| function _obd_sh_reply_current_files() {
 | |
|     filename=${cur##*/}
 | |
|     dirname=${cur%*$filename}
 | |
|     res=$(ls -a -p $dirname 2>/dev/null | sed "s#^#$dirname#")
 | |
|     compopt -o nospace
 | |
|     COMPREPLY=( $(compgen -o filenames -W "${res}" -- ${cur}) )
 | |
| }
 | |
| 
 | |
| function _obd_sh_reply_yaml_files() {
 | |
|     filename=${cur##*/}
 | |
|     dirname=${cur%*$filename}
 | |
|     res=$(ls -a -p $dirname 2>/dev/null | grep -E '(*.yaml|*.yml)' | sed "s#^#$dirname#")
 | |
|     compopt -o nospace
 | |
|     COMPREPLY=( $(compgen -o filenames -W "${res}" -- ${cur}) )
 | |
| }
 | |
| 
 | |
| function _obd_sh_complete_func
 | |
| {
 | |
|   local all_cmds
 | |
|   declare -A all_cmds
 | |
|   COMPREPLY=()
 | |
|   cur="${COMP_WORDS[COMP_CWORD]}"
 | |
|   prev="${COMP_WORDS[COMP_CWORD-1]}"
 | |
|   all_cmds["$*"]="prepare deploy redeploy reinstall start stop restart destroy upgrade mysqltest pid ssh less gdb sql mysql oracle edit list sys display create_tenant drop_tenant sysbench tpch tpcc tpcds graph display-trace set-config"
 | |
|   case $prev in
 | |
|   list)
 | |
|     return 0
 | |
|     ;;
 | |
|   -p|--path)
 | |
|   _obd_sh_reply_current_files
 | |
|   ;;
 | |
|   -c|--config)
 | |
|   _obd_sh_reply_yaml_files
 | |
|   ;;
 | |
|   -n|--deploy-name)
 | |
|   _obd_sh_reply_deploy_names
 | |
|   ;;
 | |
|   *)
 | |
|     valid_len=$COMP_CWORD
 | |
|     words=( ${COMP_WORDS[@]::valid_len} )
 | |
|     index=valid_len
 | |
|     while (( index >= 1 )); do
 | |
|         target="${words[*]}"
 | |
|         cmd=${all_cmds[$target]}
 | |
|         if [[ "$cmd" != "" ]]
 | |
|         then
 | |
|           if [[ $cmd =~ ^_obd_sh_reply.* ]]
 | |
|           then
 | |
|             $cmd
 | |
|             break
 | |
|           else
 | |
|             if [[ $cmd =~ .*'=' ]]
 | |
|             then
 | |
|             compopt -o nospace
 | |
|             fi
 | |
|             COMPREPLY=( $(compgen -W "${cmd}" -- ${cur}) )
 | |
|             break
 | |
|           fi
 | |
|         fi
 | |
|         index=$(( index - 1))
 | |
|         tmp=${words[*]::index}
 | |
|         [[ "$tmp" != "" ]] && parent_cmd=${all_cmds[$tmp]}
 | |
|         if [[ "$parent_cmd" =~ ^_obd_sh_reply.*  || " $parent_cmd " =~ " ${words[index]} " ]]; then
 | |
|           words[index]='*'
 | |
|         else
 | |
|           break
 | |
|         fi
 | |
|     done
 | |
|     ;;
 | |
|   esac
 | |
| 
 | |
| 
 | |
| }
 | 
