: ${NODE_PREFIX=amb} : ${AMBARI_SERVER_NAME:=${NODE_PREFIX}0} : ${MYDOMAIN:=mycorp.kom} : ${IMAGE:="sequenceiq/kylin:0.7.2"} : ${DOCKER_OPTS:="--dns 127.0.0.1 --entrypoint /usr/local/serf/bin/start-serf-agent.sh -e KEYCHAIN=$KEYCHAIN"} : ${CLUSTER_SIZE:=1} : ${DEBUG:=1} : ${SLEEP_TIME:=2} : ${DRY_RUN:=false} run-command() { CMD="$@" if [ "$DRY_RUN" == "false" ]; then debug "$CMD" "$@" else debug [DRY_RUN] "$CMD" fi } amb-clean() { unset NODE_PREFIX AMBARI_SERVER_NAME MYDOMAIN IMAGE DOCKER_OPTS DEBUG SLEEP_TIME AMBARI_SERVER_IP DRY_RUN } get-ambari-server-ip() { AMBARI_SERVER_IP=$(get-host-ip ${AMBARI_SERVER_NAME}) } get-host-ip() { HOST=$1 docker inspect --format="{{.NetworkSettings.IPAddress}}" ${HOST} } amb-members() { get-ambari-server-ip serf members --rpc-addr $(docker inspect --format "{{.NetworkSettings.IPAddress}}" ${AMBARI_SERVER_NAME}):7373 } amb-settings() { cat <&2 } docker-ps() { #docker ps|sed "s/ \{3,\}/#/g"|cut -d '#' -f 1,2,7|sed "s/#/\t/g" docker inspect --format="{{.Name}} {{.NetworkSettings.IPAddress}} {{.Config.Image}} {{.Config.Entrypoint}} {{.Config.Cmd}}" $(docker ps -q) } docker-psa() { #docker ps|sed "s/ \{3,\}/#/g"|cut -d '#' -f 1,2,7|sed "s/#/\t/g" docker inspect --format="{{.Name}} {{.NetworkSettings.IPAddress}} {{.Config.Image}} {{.Config.Entrypoint}} {{.Config.Cmd}}" $(docker ps -qa) } amb-start-cluster() { local act_cluster_size=$1 : ${act_cluster_size:=$CLUSTER_SIZE} echo starting an ambari cluster with: $act_cluster_size nodes amb-start-first [ $act_cluster_size -gt 1 ] && for i in $(seq $((act_cluster_size - 1))); do amb-start-node $i done } _amb_run_shell() { COMMAND=$1 : ${COMMAND:? required} get-ambari-server-ip NODES=$(docker inspect --format="{{.Config.Image}} {{.Name}}" $(docker ps -q)|grep $IMAGE|grep $NODE_PREFIX|wc -l|xargs) run-command docker run -it --rm -e EXPECTED_HOST_COUNT=$NODES -e BLUEPRINT=$BLUEPRINT --link ${AMBARI_SERVER_NAME}:ambariserver --entrypoint /bin/sh $IMAGE -c $COMMAND } amb-shell() { _amb_run_shell /tmp/ambari-shell.sh } kylin-deploy-cluster() { local act_cluster_size=$1 : ${act_cluster_size:=$CLUSTER_SIZE} if [ $# -gt 1 ]; then BLUEPRINT=$2 else [ $act_cluster_size -gt 1 ] && BLUEPRINT=hdp-multinode-kylin || BLUEPRINT=hdp-singlenode-kylin fi : ${BLUEPRINT:?" required (hdp-singlenode-kylin / hdp-multinode-kylin)"} amb-start-cluster $act_cluster_size _amb_run_shell /tmp/install-cluster.sh } amb-start-first() { run-command docker run -P -d $DOCKER_OPTS --name $AMBARI_SERVER_NAME -h $AMBARI_SERVER_NAME.$MYDOMAIN $IMAGE --tag ambari-server=true } amb-copy-to-hdfs() { get-ambari-server-ip FILE_PATH=${1:?"usage: "} FILE_NAME=${2:?"usage: "} DIR=${3:?"usage: "} amb-create-hdfs-dir $DIR DATANODE=$(curl -si -X PUT "http://$AMBARI_SERVER_IP:50070/webhdfs/v1$DIR/$FILE_NAME?user.name=hdfs&op=CREATE" |grep Location | sed "s/\..*//; s@.*http://@@") DATANODE_IP=$(get-host-ip $DATANODE) curl -T $FILE_PATH "http://$DATANODE_IP:50075/webhdfs/v1$DIR/$FILE_NAME?op=CREATE&user.name=hdfs&overwrite=true&namenoderpcaddress=$AMBARI_SERVER_IP:8020" } amb-create-hdfs-dir() { get-ambari-server-ip DIR=$1 curl -X PUT "http://$AMBARI_SERVER_IP:50070/webhdfs/v1$DIR?user.name=hdfs&op=MKDIRS" > /dev/null 2>&1 } amb-scp-to-first() { get-ambari-server-ip FILE_PATH=${1:?"usage: "} DEST_PATH=${2:?"usage: "} scp $FILE_PATH root@$AMBARI_SERVER_IP:$DEST_PATH } amb-start-node() { get-ambari-server-ip : ${AMBARI_SERVER_IP:?"AMBARI_SERVER_IP is needed"} NUMBER=${1:?"please give a parameter it will be used as node"} if [ $# -eq 1 ] ;then MORE_OPTIONS="-d" else shift MORE_OPTIONS="$@" fi run-command docker run $MORE_OPTIONS -e SERF_JOIN_IP=$AMBARI_SERVER_IP $DOCKER_OPTS --name ${NODE_PREFIX}$NUMBER -h ${NODE_PREFIX}${NUMBER}.$MYDOMAIN $IMAGE --log-level debug }