2024-05-24 09:44:06 +08:00

784 lines
23 KiB
Bash
Executable File

#!/bin/bash
BASE_DIR=$(readlink -f "$(dirname ${BASH_SOURCE[0]})/../..")
DEPLOY_PATH="$BASE_DIR/tools/deploy"
OBSERVER_BIN="$BASE_DIR/tools/deploy/bin/observer"
OBD_CLUSTER_PATH="$DEPLOY_PATH"/.obd/cluster
OBD_LOCAL_VERSION_PATH="$DEPLOY_PATH"/.obd/version
shopt -s expand_aliases
source $DEPLOY_PATH/activate_obd.sh
tag="latest"
export TELEMETRY_REPORTER="dev"
current_path=$(pwd)
if [[ "$current_path" != "$BASE_DIR/tools/deploy" ]]
then
echo "Switching basedir to [$BASE_DIR/tools/deploy]..."
cd $BASE_DIR/tools/deploy || exit 1
fi
function absolute_path {
if [[ "$1" != "" ]]
then
if [[ $(echo "$1" | grep -E '^/') == "" ]]
then
echo ${current_path}/$1
else
echo $1
fi
fi
}
function obd_exec {
echo -e "\033[32m>>> obd $* \033[0m"
$OBD_BIN $* $VERBOSE_FLAG
}
alias obd="obd_exec"
function variables_prepare {
if [[ "$(readlink -f "$BASE_DIR"/..)" == "$OB_FLOW_WORK_DIR" ]]
then
path=$(readlink -f "$BASE_DIR")
export task="${path##*/}"
else
export task="default"
fi
port_gen=$((100*($(id -u)%500)+10000))
HOST=$(hostname -i)
DATA_PATH="/data/$(whoami)"
IPADDRESS="127.0.0.1"
if [[ -f "$BASE_DIR/.ce" ]]
then
export IS_CE=1
COMPONENT="oceanbase-ce"
else
COMPONENT="oceanbase"
fi
if grep 'dep_create.sh' $BASE_DIR/build.sh 2>&1 >/dev/null
then
DEP_PATH=$BASE_DIR/deps/3rd
else
DEP_PATH=$BASE_DIR/rpm/.dep_create/var
fi
export LD_LIBRARY_PATH=$DEP_PATH/u01/obclient/lib:$LD_LIBRARY_PATH
OBCLIENT_BIN=$DEP_PATH/u01/obclient/bin/obclient
OBCLIENT_BIN_ARGS="--obclient-bin=$OBCLIENT_BIN"
MYSQLTEST_BIN=$DEP_PATH/u01/obclient/bin/mysqltest
MYSQLTEST_BIN_ARGS="--mysqltest-bin=$MYSQLTEST_BIN"
CLIENT_BIN_ARGS="$OBCLIENT_BIN_ARGS $MYSQLTEST_BIN_ARGS"
DEFAULT_DEPLOY_NAME_FILE=$OBD_HOME/.obd/.default_deploy
}
function copy_sh {
if [[ -f copy.sh ]]
then
bash copy.sh $BUILD_PATH
else
echo 'can not find copy.sh'
fi
}
function mirror_create {
# obproxy mirror create
if [[ "$WITH_LOCAL_PROXY" != "" ]] && [[ -x $DEPLOY_PATH/bin/obproxy ]]
then
odp_version=$("$DEPLOY_PATH"/bin/obproxy --version 2>&1 | grep -E 'obproxy \(OceanBase [\.0-9]+ \S+\)' | grep -Eo '\s[.0-9]+\s')
obd mirror create -n obproxy -p "$DEPLOY_PATH" -t $tag -V $odp_version -f
fi
# observer mirror create
if [[ "$OBSERVER_PATH" != "" ]]
then
mkdir -p $BASE_DIR/tools/deploy/{bin,etc,admin}
cp -f $OBSERVER_PATH $OBSERVER_BIN || exit 1
fi
obs_version_info=`$OBSERVER_BIN -V 2>&1`
if [[ $? != 0 ]]
then
echo $obs_version_info
return 1
fi
obs_version=$(echo "$obs_version_info" | grep -E "observer \(OceanBase([ \_]CE)? ([.0-9]+)\)" | grep -Eo '([.0-9]+)')
if [[ "$obs_version" == "" ]]
then
echo "can not check observer version"
echo $obs_version_info
return 1
fi
if [ "x$IS_CE" == "x" ]
then
export IS_CE="0"
[[ $($OBSERVER_BIN -V 2>&1 | grep -E 'OceanBase[_ ]CE') ]] && COMPONENT="oceanbase-ce" && export IS_CE="1"
fi
$OBSERVER_BIN -V
[[ -f "$BASE_DIR/tools/deploy/obd/.observer_obd_plugin_version" ]] && obs_version=$(cat $BASE_DIR/tools/deploy/obd/.observer_obd_plugin_version)
obs_mirror_info=$(obd_exec mirror create -n $COMPONENT -p "$DEPLOY_PATH" -V "$obs_version" -t $tag -f) && success=1
if [[ "$success" != "1" ]]
then
echo "$obs_mirror_info"
echo "create observer mirror failed"
return 2
else
echo "$obs_mirror_info"
fi
obs_package_hash=$(echo "$obs_mirror_info"| grep -E '^md5:' | awk '{print $2}')
}
## generate config
function generate_config {
app_name=$task.$USER.$HOST
port_num=$port_gen
mysql_port=$port_num && port_num=$((port_num+1))
rpc_port=$port_num && port_num=$((port_num+1))
mysql_port2=$port_num && port_num=$((port_num+1))
rpc_port2=$port_num && port_num=$((port_num+1))
listen_port=$port_num && port_num=$((port_num+1))
prometheus_listen_port=$port_num && port_num=$((port_num+1))
base_template=$(cat obd/config.yaml.template)
proxy_conf=$(cat obd/obproxy.yaml.template)
if [[ "$WITH_LOCAL_PROXY" != "" ]]
then
proxy_conf=$(echo "$proxy_conf" | sed 's/package_hash: [0-9a-z]*/tag: {{%% TAG %%}}/g')
fi
proxy_conf=${proxy_conf//'{{%% TAG %%}}'/$tag}
proxy_conf=${proxy_conf//'{{%% COMPONENT %%}}'/$COMPONENT}
proxy_conf=${proxy_conf//'{{%% LISTEN_PORT %%}}'/$listen_port}
proxy_conf=${proxy_conf//'{{%% PROMETHEUS_LISTEN_PORT %%}}'/$prometheus_listen_port}
proxy_conf=${proxy_conf//'{{%% OBPORXY_HOME_PATH %%}}'/"$DATA_PATH"/obproxy}
base_template=${base_template//"{{%% COMPONENT %%}}"/$COMPONENT}
base_template=${base_template//"{{%% TAG %%}}"/$tag}
base_template=${base_template//"{{%% DEPLOY_PATH %%}}"/$DEPLOY_PATH}
base_template=${base_template//"{{%% TOOLS_PATH %%}}"/$BASE_DIR/tools}
base_template=${base_template//"{{%% MINI_SIZE %%}}"/$mem}
base_template=${base_template//"{{%% APPNAME %%}}"/$app_name}
base_template=${base_template//"{{%% EXTRA_PARAM %%}}"/}
# simple.yaml
SERVERS=$(cat <<-EOF
servers:
- name: server1
ip: $IPADDRESS
server1:
mysql_port: $mysql_port
rpc_port: $rpc_port
home_path: $DATA_PATH/observer1
zone: zone1
# The directory for data storage. The default value is home_path/store.
# data_dir: /data
# The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
# redo_dir: /redo
EOF
)
single_conf=${base_template}
single_conf=${single_conf//"{{%% SERVERS %%}}"/$SERVERS}
single_without_proxy_conf=${single_conf//"{{%% PROXY_CONF %%}}"/}
single_with_proxy_conf=${single_conf//"{{%% PROXY_CONF %%}}"/$proxy_conf}
[ ! -f ./single.yaml ] && echo "$single_without_proxy_conf" > ./single.yaml && echo "generate yaml config file: $(readlink -f ./single.yaml)"
[ ! -f ./single-with-proxy.yaml ] && echo "$single_with_proxy_conf" > ./single-with-proxy.yaml && echo "generate yaml config file: $(readlink -f ./single-with-proxy.yaml)"
# 2x1
SERVERS=$(cat <<-EOF
servers:
- name: server1
ip: $IPADDRESS
- name: server2
ip: $IPADDRESS
server1:
mysql_port: $mysql_port
rpc_port: $rpc_port
home_path: $DATA_PATH/observer1
# The directory for data storage. The default value is home_path/store.
# data_dir: /data
# The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
# redo_dir: /redo
zone: zone1
server2:
mysql_port: $mysql_port2
rpc_port: $rpc_port2
home_path: $DATA_PATH/observer2
# The directory for data storage. The default value is home_path/store.
# data_dir: /data
# The directory for clog, ilog, and slog. The default value is the same as the data_dir value.
# redo_dir: /redo
zone: zone2
EOF
)
distributed_conf=${base_template}
distributed_conf=${distributed_conf//"{{%% SERVERS %%}}"/$SERVERS}
distributed_without_proxy_conf=${distributed_conf//"{{%% PROXY_CONF %%}}"/}
distributed_with_proxy_conf=${distributed_conf//"{{%% PROXY_CONF %%}}"/$proxy_conf}
[ ! -f ./distributed.yaml ] && echo "$distributed_without_proxy_conf" > ./distributed.yaml && echo "generate yaml config file: $(readlink -f ./distributed.yaml)"
[ ! -f ./distributed-with-proxy.yaml ] && echo "$distributed_with_proxy_conf" > ./distributed-with-proxy.yaml && echo "generate yaml config file: $(readlink -f ./distributed-with-proxy.yaml)"
}
function show_deploy_name {
echo -e "\e[1m\033[32mDeploy name: $deploy_name \033[0m"
}
function get_deploy_name {
[ "$HELP" == "1" ] && return
if [[ "$deploy_name" != "" ]]
then
return
fi
if [[ "$DEPLOY_NAME" == "" ]]
then
[[ "$YAML_CONF" != "" ]] && yaml_name=${YAML_CONF##*/} && deploy_name=${yaml_name%.yaml} && show_deploy_name && return
mkdir -p $OBD_CLUSTER_PATH
cluster_dirs=$(ls -1 $OBD_CLUSTER_PATH)
cluster_num=$(echo "$cluster_dirs" | wc -l )
if (( ${cluster_num} == 1 )) && [[ -f $DEFAULT_DEPLOY_NAME_FILE ]]
then
deploy_name=$(cat "$DEFAULT_DEPLOY_NAME_FILE") && show_deploy_name && return
elif [[ "$OB_DO_DEFAULT_DEPLOY_NAME" ]]
then
deploy_name=$OB_DO_DEFAULT_DEPLOY_NAME && show_deploy_name && return
fi
echo """
Deploy name is required. Use -n <deploy-name> to set the deploy name.
Available deployments:
$cluster_dirs
""" && exit 1
else
deploy_name="$DEPLOY_NAME" && show_deploy_name && return
fi
}
function get_baseurl {
repo_file=$OBD_HOME/.obd/mirror/remote/taobao.repo
start=0
end=$(cat $repo_file | wc -l )
for line in $(grep -nE "^\[.*\]$" $repo_file)
do
num=$(echo "$line" | awk -F ":" '{print $1}')
[ "$find_section" == "1" ] && end=$num
is_target_section=$(echo $(echo "$line" | grep -E "\[\s*$repository\s*\]"))
[ "$is_target_section" != "" ] && start=$num && find_section='1'
done
repo_section=$(awk "NR>=$start && NR<=$end" $repo_file)
baseurl=$(echo "$repo_section" | grep baseurl | awk -F '=' '{print $2}')
}
function get_version_and_release {
start=0
end=$(cat $config_yaml | wc -l)
for line in $(grep -nE '^\S+:' $config_yaml)
do
num=$(echo "$line" | awk -F ":" '{print $1}')
[ "$find_obproxy" == "1" ] && end=$num
[ "$(echo "$line" | grep obproxy)" != "" ] && start=$num && find_obproxy='1'
done
odp_conf=$(awk "NR>=$start && NR<=$end" $config_yaml)
version=$(echo "$odp_conf" | grep 'version:' | awk '{print $2}')
release=$(echo "$odp_conf" | grep 'release:' | awk '{print $2}')
include_file=$(echo "$odp_conf"| grep 'include:'| awk '{print $2}')
if [[ -f $include_file ]]
then
_repo=$(echo $(grep '__mirror_repository_section_name:' $include_file | awk '{print $2}'))
[ "$_repo" != "" ] && repository=$_repo
version=$(echo $(grep 'version:' $include_file | awk '{print $2}'))
release=$(echo $(grep 'release:' $include_file | awk '{print $2}'))
fi
}
function get_obproxy {
repository="taobao"
obproxy_mirror_repository=$(echo $(grep '__mirror_repository_section_name' $config_yaml | awk -F':' '{print $2}'))
[ "$obproxy_mirror_repository" != "" ] && repository=$obproxy_mirror_repository
get_version_and_release
get_baseurl
if [[ "$baseurl" != "" && "$version" != "" && "$release" != "" ]]
then
pkg_name="obproxy-$version-$release.x86_64.rpm"
if [ "$(find $OBD_HOME/.obd/mirror/local -name $pkg_name)" == "" ]
then
download_dir=$OBD_HOME/.obd_download
mkdir -p $download_dir
wget $baseurl/obproxy/$pkg_name -O "$download_dir/$pkg_name" -o $download_dir/obproxy.down
obd mirror clone "$download_dir/$pkg_name" && rm -rf $download_dir && return 0
else
return 0
fi
fi
obd mirror enable $repository
}
function deploy_cluster {
get_deploy_name
if [[ "$YAML_CONF" != "" ]]
then
config_yaml=$YAML_CONF
else
if [[ -f $OBD_CLUSTER_PATH/$deploy_name/tmp_config.yaml && "$(grep config_status $OBD_CLUSTER_PATH/$deploy_name/.data | awk '{print $2}')" != "UNCHNAGE" ]]
then
config_yaml=$OBD_CLUSTER_PATH/$deploy_name/tmp_config.yaml
else
config_yaml=$OBD_CLUSTER_PATH/$deploy_name/config.yaml
fi
fi
[[ "$(grep -E "^obproxy:" $config_yaml)" != "" ]] && ( get_obproxy || exit 1 )
echo "$deploy_name" > "$DEFAULT_DEPLOY_NAME_FILE"
if [[ "$HIDE_DESTROY" == "1" ]]
then
obd cluster destroy "$deploy_name" -f > /dev/null 2>&1
else
obd cluster destroy "$deploy_name" -f
fi
if [[ -f $OBD_CLUSTER_PATH/$deploy_name/inner_config.yaml ]]
then
sed -i '/$_deploy_/d' $OBD_CLUSTER_PATH/$deploy_name/inner_config.yaml
fi
[[ "$YAML_CONF" == "" ]] || yaml_config_args="-c $YAML_CONF"
obd cluster deploy "$deploy_name" -C $yaml_config_args || exit 1
if ! obd cluster start "$deploy_name" -f;
then
while [[ "$NO_CONFIRM" != "1" && "$(grep 'config_status: NEED_REDEPLOY' $OBD_CLUSTER_PATH/$deploy_name/.data)" != "" ]]
do
read -r -p "Start $deploy_name failed, do you want to edit config and continue?[Y/n]" input
case $input in
[Yy]);&
"")
obd cluster edit-config "$deploy_name"
if obd cluster start "$deploy_name" -f;
then
break
else
continue
fi
;;
[Nn])
exit 1
esac
done
fi
get_init_sql
if [[ "$NEED_FAST_REBOOT" == "1" ]]
then
obd test mysqltest "$deploy_name" $INIT_FLIES --init-only $CLIENT_BIN_ARGS --fast-reboot
else
obd test mysqltest "$deploy_name" $INIT_FLIES --init-only $CLIENT_BIN_ARGS
fi
}
function get_init_sql {
[[ "$INIT_FLIES" != "" ]] && return
if [[ "$MINI" == "1" && -f $BASE_DIR/tools/deploy/init.sql ]]
then
INIT_FLIES="--init-sql-files=init.sql,init_user.sql|root@mysql|test"
[ -f init_user_oracle.sql ] && INIT_FLIES="${INIT_FLIES},init_user_oracle.sql|SYS@oracle|SYS"
fi
}
function start_cluster {
get_deploy_name
obd cluster start "$deploy_name" -f
}
function stop_cluster {
get_deploy_name
obd cluster stop "$deploy_name"
}
function restart_cluster {
get_deploy_name
obd cluster restart "$deploy_name"
}
function upgreade_cluster {
get_deploy_name
obd cluster upgrade "$deploy_name"
}
function destroy_cluster {
get_deploy_name
if [[ ! -e "$OBD_CLUSTER_PATH/$deploy_name" ]]
then
exit 1
fi
if [[ "$(grep 'status: STATUS_DESTROYED' $OBD_CLUSTER_PATH/$deploy_name/.data)" == "" ]]
then
obd cluster destroy "$deploy_name" -f
fi
if [[ "$RM_CLUSTER" == "1" ]]
then
rm -rf $OBD_CLUSTER_PATH/$deploy_name
else
echo "Use --rm to remove deploy $deploy_name dir"
fi
}
function reinstall_cluster {
get_deploy_name
obd cluster reinstall "$deploy_name" -c $COMPONENT --hash=$obs_package_hash
}
function tool_cmd {
cmd=$1
get_deploy_name
if [[ $HELP == "1" ]]
then
obd tool command --help
return
fi
obd tool command "$deploy_name" $cmd $extra_args
}
function connect {
get_deploy_name
if [[ $HELP == "1" ]]
then
obd tool db_connect --help
return
fi
obd tool db_connect "$deploy_name" $OBCLIENT_BIN_ARGS $extra_args
}
function mysqltest {
if [[ $HELP == "1" ]]
then
obd test mysqltest --help
return
fi
get_deploy_name
if [[ "$NEED_REBOOT" == "1" || "$YAML_CONF" != "" ]]
then
mirror_create || return 1
deploy_cluster
fi
get_init_sql
obd test mysqltest "$deploy_name" $CLIENT_BIN_ARGS $extra_args $INIT_FLIES
}
function deploy {
if [[ "$YAML_CONF" != *.yaml && "$DEPLOY_NAME" == "" ]]
then
echo "Use -n to set deploy name, or -c to set the deploy config"
exit 1
fi
get_deploy_name
if [[ "$YAML_CONF" != "" && -d "$OBD_CLUSTER_PATH"/"$deploy_name" ]]
then
while true
do
read -r -p "Deploy name: $deploy_name already exists. Do you want to OVERWRITE it?[y/n]" input
case $input in
[Yy])
break
;;
[Nn])
exit 1
esac
done
fi
HIDE_DESTROY=1
[[ "$EXEC_CP" == "1" ]] && copy_sh
mirror_create || exit 1
deploy_cluster
}
function edit {
get_deploy_name
obd cluster edit-config $deploy_name
if [[ "$(grep 'config_status: NEED_REDEPLOY' $OBD_CLUSTER_PATH/$deploy_name/.data)" != "" ]]
then
echo -e "\e[33mif you need redeploy, please use '$entrance redeploy -n $deploy_name'\e[0m"
fi
}
function display {
get_deploy_name
obd cluster display $deploy_name
}
function create_tenant {
get_deploy_name
obd cluster tenant create $deploy_name $extra_args
}
function drop_tenant {
get_deploy_name
obd cluster tenant drop $deploy_name $extra_args
}
function sysbench {
get_deploy_name
obd test sysbench $deploy_name $OBCLIENT_BIN_ARGS $extra_args
}
function tpch {
get_deploy_name
obd test tpch $deploy_name $OBCLIENT_BIN_ARGS $extra_args
}
function tpcc {
get_deploy_name
obd test tpcc $deploy_name $OBCLIENT_BIN_ARGS $extra_args
}
function tpcds {
get_deploy_name
obd test tpcds $deploy_name $OBCLIENT_BIN_ARGS $extra_args
}
function graph {
get_deploy_name
obd tool graph $deploy_name $extra_args
}
function set-config {
OB_DO_GLOBAL_CONFIG=${OB_DO_GLOBAL_CONFIG:-~/.ob_do_global}
touch $OB_DO_GLOBAL_CONFIG
if [[ "$1" != "" ]]; then
key="$1"
value="$2"
if [[ $(grep -E "^$key=" $OB_DO_GLOBAL_CONFIG) ]]; then
sed -i "s/^$key=.*/$key=$value/g" $OB_DO_GLOBAL_CONFIG
else
echo "$key=$value" >> $OB_DO_GLOBAL_CONFIG
fi
fi
}
function help_info {
echo """
Usage: $entrance <command> [options]
Available commands:
prepare [-b BUILD_PATH -p DATA_PATH -h HOST] Prepare for deployment.
deploy -c YAML_CONF [-n DEPLOY_NAME] Deploy a cluster by a deploy yaml file. Default deploy name will be the name of yaml file.
redeploy [-c YAML_CONF -n DEPLOY_NAME] Redeploy cluster.
reinstall [-n DEPLOY_NAME] Reinstall cluster. (Change bin file, sync libs and restart)
start [-n DEPLOY_NAME] Start cluster.
stop [-n DEPLOY_NAME] Stop a started cluster.
restart [-n DEPLOY_NAME] Restart cluster.
destroy [-n DEPLOY_NAME] Destroy cluster.
upgrade [-n DEPLOY_NAME] Upgrade cluster.
list [-n DEPLOY_NAME] List cluster.
display [-n DEPLOY_NAME] Display cluster info.
create_tenant [-n DEPLOY_NAME] Create tenant.
drop_tenant [-n DEPLOY_NAME] Drop tenant.
sysbench [-n DEPLOY_NAME] Run sysbench, use '--help' for more details.
tpch [-n DEPLOY_NAME] Run tpch test, use '--help' for more details.
tpcc [-n DEPLOY_NAME] Run tpcc test, use '--help' for more details.
tpcds [-n DEPLOY_NAME] Run tpcds test, use '--help' for more details.
mysqltest [-n DEPLOY_NAME] Run mysqltest, use '--help' for more details.
pid [-n DEPLOY_NAME] Get pid list for servers, use '--help' for more details.
ssh [-n DEPLOY_NAME] Ssh to target server and change directory to log path, use '--help' for more details.
less [-n DEPLOY_NAME] Use command less to the observer.log, use '--help' for more details.
gdb [-n DEPLOY_NAME] Use gdb to attch target server, use '--help' for more details.
sql [-n DEPLOY_NAME] Connect to target server by root@sys, use '--help' for more details.
sys [-n DEPLOY_NAME] Connect to target server by root@sys, use '--help' for more details.
mysql [-n DEPLOY_NAME] Connect to target server by root@mysql, use '--help' for more details.
oracle [-n DEPLOY_NAME] Connect to target server by SYS@oracle, use '--help' for more details.
graph [-n DEPLOY_NAME]
Options:
-V, --version Show version of obd.
-c YAML_CONF, --config YAML_CONF The deploy yaml file.
-n DEPLOY_NAME, --deploy-name DEPLOY_NAME
The name of the deployment.
-v VERBOSE Activate verbose output.
-b BUILD_PATH, --build-path BUILD_PATH The build path of oceanbase. If not specified, it will be chosen in alphabetical order.
-p DATA_PATH, --data-path DATA_PATH The data path for server deployment, it can be changed in the yaml file.
--ip IPADDRESS The ipaddress for server deployment, it can be changed in the yaml file.
--port PORT_BEGIN The port starting point. All the ports can be changed in the yaml file.
--with-local-obproxy Use local obproxy.
--skip-copy Skip copy.sh.
--cp Exec copy.sh.
--reboot Redeploy cluster before mysqltest.
"""
}
function main() {
entrance=${OBD_SH_ENTRANCE:-obd.sh}
variables_prepare
command="$1"
shift
extra_args=""
while true; do
case "$1" in
-v ) VERBOSE_FLAG='-v'; set -x; shift ;;
--with-local-obproxy) WITH_LOCAL_PROXY="1";SKIP_COPY="1"; shift ;;
-c | --config )
if [[ $command == "deploy" || $command == "redeploy" || $command == "mysqltest" ]]
then
YAML_CONF="$2"
shift 2
else
extra_args="$extra_args $1"
shift
fi
;;
-n | --deploy-name ) DEPLOY_NAME="$2"; shift 2 ;;
-b | --build-path ) BUILD_PATH="$2"; shift 2 ;;
-p | --data-path ) DATA_PATH="$2"; shift 2 ;;
-N ) NO_CONFIRM="1"; shift ;;
--ip ) IPADDRESS="$2"; shift 2 ;;
--disable-reboot ) DISABLE_REBOOT="1"; extra_args="$extra_args $1"; shift ;;
--reboot ) NEED_REBOOT="1"; shift ;;
--fast-reboot ) NEED_FAST_REBOOT="1"; extra_args="$extra_args $1"; shift ;;
--cp ) EXEC_CP="1"; shift ;;
--skip-copy ) SKIP_COPY="1"; shift ;;
--mini) MINI="1"; shift ;;
--port ) export port_gen="$2"; extra_args="$extra_args $1"; shift ;;
--observer ) OBSERVER_PATH="$2"; shift 2 ;;
--rm ) RM_CLUSTER="1"; shift ;;
-- ) shift ;;
"" ) break ;;
* ) extra_args="$extra_args $1"; [[ "$1" == "--help" || "$1" == "-h" ]] && HELP="1" ; shift ;;
esac
done
YAML_CONF=$(absolute_path ${YAML_CONF})
DATA_PATH=$(absolute_path ${DATA_PATH})
BUILD_PATH=$(absolute_path ${BUILD_PATH})
OBSERVER_PATH=$(absolute_path ${OBSERVER_PATH})
if [[ "$MINI" == "1" && "$DISABLE_REBOOT" != "1" ]]
then
NEED_REBOOT="1"
fi
if [[ ! -f $OBD_HOME/.obd/.obd_environ || "$(grep '"OBD_DEV_MODE": "1"' $OBD_HOME/.obd/.obd_environ)" == "" ]]
then
obd devmode enable || (echo "Exec obd cmd failed. If your branch is based on 3.1_opensource_release, please go to the deps/3rd directory and execute 'bash dep_create.sh all' to install obd." && exit 1)
[[ "$OBD_LOCK_MODE" ]] || obd env set OBD_LOCK_MODE 0
fi
if [[ "$(grep '"OBD_DEPLOY_BASE_DIR":' $DEPLOY_PATH/.obd/.obd_environ)" == "" ]]
then
obd env set OBD_DEPLOY_BASE_DIR "$DEPLOY_PATH"
fi
OBD_DEPLOY_BASE_DIR=$(grep -Po '"OBD_DEPLOY_BASE_DIR": "(.*?)"[,}]' ./.obd/.obd_environ | sed 's/"OBD_DEPLOY_BASE_DIR": "\(.*\)"[,}]/\1/g')
if [[ ! -d $OBD_DEPLOY_BASE_DIR ]]
then
obd env set OBD_DEPLOY_BASE_DIR "$DEPLOY_PATH"
fi
case $command in
-V | --version)
obd --version
;;
-h | --help)
help_info
;;
prepare)
[[ "$SKIP_COPY" == "" ]] && copy_sh
generate_config
;;
deploy)
deploy
;;
redeploy)
deploy
;;
start)
start_cluster
;;
stop)
stop_cluster
;;
restart)
restart_cluster
;;
destroy)
destroy_cluster
;;
upgrade)
[[ "$EXEC_CP" == "1" ]] && copy_sh
mirror_create || exit 1
upgreade_cluster
;;
mysqltest)
[[ "$EXEC_CP" == "1" ]] && copy_sh
mysqltest
;;
sql);&
sys)
connect
;;
mysql)
extra_args="--tenant mysql $extra_args"
connect
;;
oracle)
extra_args="--user SYS -m OB_ORACLE --tenant oracle $extra_args"
connect
;;
pid)
tool_cmd pid
;;
ssh)
tool_cmd ssh
;;
less)
tool_cmd less
;;
gdb)
tool_cmd gdb
;;
reinstall)
get_deploy_name
[[ "$EXEC_CP" == "1" ]] && copy_sh
mirror_create && reinstall_cluster
;;
list)
obd cluster list
;;
edit)
edit
;;
display)
display
;;
create_tenant)
create_tenant
;;
drop_tenant)
drop_tenant
;;
sysbench)
sysbench
;;
tpch)
tpch
;;
tpcc)
tpcc
;;
tpcds)
tpcds
;;
graph)
graph
;;
display-trace)
obd display-trace ${extra_args}
;;
set-config)
set-config ${extra_args}
;;
*)
echo "Unknown command: $command"
help_info
exit 1
;;
esac
}
main "$@"