#!/bin/bash
# Copyright 2012 Severalnines AB
#
# MODIFY THE BELOW TO SUIT YOU ENV:
LOCKFILE="/tmp/s9s_clone.lock"
JOBID=0    
function init
{
    FILES=`ls /etc/cmon.cnf 2>&1`
    FILES2=`ls /etc/cmon.d/*.cnf 2>&1`    
    FILES="$FILES $FILES2"
    configfile=""
    for f in $FILES 
    do
	X=`grep -l cluster_id=${CLUSTER_ID} $f 2>&1 `	
	if [ $? -eq 0 ]; then 
	    source $f
            configfile=$f
	fi
    done

    if [ -z "$configfile" ]; then
	echo "No matching configuration file found having cluster_id=${CLUSTER_ID}"
	exit 1
    fi
    
    source $configfile
    
    CMON_DB_HOST=127.0.0.1
    CMON_DB_PORT=$mysql_port
    CMON_USER=cmon
    CMON_DB_DB=cmon
    CMON_PASSWORD=$mysql_password
    CONNECT_TIMEOUT=10
    CLUSTER_TYPE=$type
    MYSQL_OPTS="--connect-timeout=$CONNECT_TIMEOUT"
    OSUSER=$USER
    MYSQL_BIN=$mysql_basedir/bin//mysql
    MYSQL_BIN2=$mysql_bindir/mysql 
    if ! test -f $MYSQL_BIN; then
	if ! test -f $MYSQL_BIN2; then
	    echo "Could not find mysql client binary"
	    echo "Change MYSQL_BIN in beginning of the scipt"
	    exit 1
	fi
	MYSQL_BIN=$MYSQL_BIN2
    fi
    if ! test -f $MYSQL_BIN; then
	echo "Could not find mysql client binary"
	log_job_message "Could not find mysql client binary" 1
	log_job 'FAILED' 'backup failed' 1
	exit 1
    fi
    if [ "$OSUSER" != "root" ]; then
	echo "must be executed as 'root' or with 'sudo'"
	exit 1
    fi
}
 

function log_job_message
{    
    MSG=$1
    EXIT_CODE=$2
    QUERY="INSERT INTO cmon_job_message(cid, jobid,message,exit_code,report_ts) VALUES($CLUSTER_ID,$JOBID,\"$MSG\",$EXIT_CODE,now())"
    echo $QUERY >> /tmp/queries
    if [ $JOBID -ne 0 ]; then 
	$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
    else
	if [ $EXIT_CODE -eq 0 ]; then
   	   echo "$MSG"
	else
   	   echo "Failed: $MSG"
	fi
    fi
}

function create_job
{    
    MSG=$1
    STATUS=$2
    EXIT_CODE=$3
    QUERY="INSERT INTO cmon_job(cid, jobid, jobspec,status,status_txt,exit_code,report_ts) VALUES($CLUSTER_ID,$JOBID,'internal','$STATUS',\"$MSG\",$EXIT_CODE,now())"
    echo $QUERY >> /tmp/queries
    if [ $JOBID -ne 0 ]; then 
	$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
    else
	if [ $EXIT_CODE -eq 0 ]; then
   	   echo "$MSG"
	else
   	   echo "Failed: $MSG"
	fi
    fi
}

function log_job
{    
    STATUS=$1
    STATUS_TXT=$2
    EXIT_CODE=$3
    QUERY="UPDATE cmon_job SET status='$STATUS', status_txt='$STATUS_TXT', exit_code=$EXIT_CODE, report_ts=NOW()  WHERE cid=$CLUSTER_ID AND jobid=$JOBID"
    if [ $JOBID -ne 0 ]; then 
	$MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
    fi
}

function remote_copy()
{
   srcfile=$1
   desthost=$2
   destfile=$3
   printf "%-4s: Copying '%s' " "$desthost" "$srcfile"
   scp $SSH_OPTS2 $srcfile $SSH_USER@$desthost:$destfile > $HOME/s9s_cmd.log 2>&1
   if [ $? -eq 0 ]; then
      log_job_message "copying file $srcfile --> $desthost:$destfile" 0
      printf "\033[32m[ok]\033[0m\n"
      return 0
   else
      log_job_message "copying file $srcfile --> $desthost:$destfile" 1
      log_job 'FAILED' 's9s_haproxy failed' 1
      printf "\033[31m[failed]\033[0m\n"
      cat $HOME/s9s_cmd.log
      exit 1
   fi
}


function remote_cmdx()
{
   desthost=$1
   xcommand=$2
   printf "%-4s: Executing '%s'" "$desthost" "$xcommand"
   ssh -q $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand "
   if [ $? -eq 0 ]; then
      printf "\033[32m[ok]\033[0m\n"
      return 0
   else
      log_job_message "command failed: $xcommand" 1
      log_job 'FAILED' 'backup failed' 1
      printf "\033[31m[failed]\033[0m\n"
      exit 1
   fi
}

function remote_cmd_nofail()
{
   desthost=$1
   xcommand=$2
   printf "%-4s: Executing '%s'" "$desthost" "$xcommand"
   ssh -q $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand "  >> $HOME/s9s_deploy.log 2>&1
   ret=$?
   printf "\033[32m[ok]\033[0m\n"
   return $ret
}

function remote_cmd()
{
   desthost=$1
   xcommand=$2
   MAX_RETRIES=1
   printf "%-4s: Executing '%s' " "$desthost" "$xcommand"
   retry=0
   while [ $retry -lt $MAX_RETRIES ]; 
   do
      x=`ssh -q $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand " > $HOME/s9s_cmd.log 2>&1`
      if [ $? -eq 0 ]; then
        printf "\033[32m[ok]\033[0m\n"
	log_job_message "Executed on $desthost : $xcommand" 0
        return 0
      fi
      retry=`expr $retry + 1`
      printf "\033[31m[failed: retrying ${retry}/${MAX_RETRIES}]\033[0m\n"
      ssh -q $SSH_OPTS $SSH_USER@$desthost " sync " 2>&1  >> $HOME/s9s_deploy.log
      sleep 1
   done
   
   log_job_message "Command failed: $xcommand" 1
   log_job 'FAILED' 's9s_clone --create failed' 1
   printf "\033[31m[failed]\033[0m\n"
   echo $x
   echo 'The following command failed:'
   echo "ssh -q $SSH_OPTS $SSH_USER@$desthost \" $SUDO  $xcommand \""
   cat $HOME/s9s_cmd.log
   echo 'Try running the command on the line above again, contact http://support.severalnines.com/ticket/new, attach the output from deploy.sh and the error from running the command to the Support issue.'
   exit 1
}


function remote_cmd3()
{
   desthost=$1
   xcommand=$2
   printf "%-4s: Executing '%s' " "$desthost" "$xcommand"
   ssh -nq -tt $SSH_OPTS $SSH_USER@$desthost "$SUDO $xcommand "   >> $HOME/s9s_deploy.log 2>&1
   if [ $? -eq 0 ]; then
      printf "\033[32m[ok]\033[0m\n"
      return 0
   else
      printf "\033[31m[failed]\033[0m\n"
      exit 1
   fi
}
function install_agent
{
    args=`getopt p:i:P:a:h: $*`
    set -- $args
    for i
    do
	case "$i" in
            -p)
		CMON_PASSWORD="$2"; shift;
		shift;;
            -h)
		HOSTNAME="$2"; shift;
		shift;;
            -i)
		CLUSTER_ID="$2"; shift;
		shift;;
            -a)
		AGENT_BINARY="$2"; shift;
		shift;;
	    -P)
		PORT="$2"; shift;
		shift;;
	esac
    done    
    if [ -z "$CLUSTER_ID" ]; then
	echo "s9s_clone "
	exit 1
    fi
    init

    if [ -z "$CMON_PASSWORD" ]; then
	echo "s9s_clone "
	exit 1
    fi
    
    
    if [ ! -f $AGENT_BINARY ]; then
	echo "s9s_clone "
	exit 1
    fi

    if [ -z "$HOSTNAME" ]; then
	echo "s9s_clone "
	exit 1
    fi
    echo "Not implemented"
    exit 1
    
}

function load_opts 
{
    local CLUSTER_ID=$1
    echo "load opts $CLUSTER_ID"
    OS=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='OS' AND cid=$CLUSTER_ID"`
    AGENTLESS=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='AGENTLESS' AND cid=$CLUSTER_ID"`
    CONFIGDIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='CONFIGDIR' AND cid=$CLUSTER_ID"`
    MYSQL_PORT=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='MYSQL_PORT' AND cid=$CLUSTER_ID"`
    GALERA_PORT=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='GALERA_PORT' AND cid=$CLUSTER_ID"`
    MYSQL_BASEDIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='MYSQL_BASEDIR' AND cid=$CLUSTER_ID"`
    MONITORED_MYSQL_PORT=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='MONITORED_MYSQL_PORT' AND cid=$CLUSTER_ID" 2>/dev/null`
    MYSQL_SCRIPTDIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SCRIPTDIR' AND cid=$CLUSTER_ID"`
    SSH_IDENTITY=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SSH_IDENTITY' AND cid=$CLUSTER_ID"`
    SSH_PORT=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SSH_PORT' AND cid=$CLUSTER_ID"`
    SSH_USER=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SSH_USER' AND cid=$CLUSTER_ID"`
    SSH_OPTSX=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SSH_OPTS' AND cid=$CLUSTER_ID"`
    SUDO=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='SUDO' AND cid=$CLUSTER_ID"`
    
    OS_USER_HOME=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='OS_USER_HOME' AND cid=$CLUSTER_ID"`
    DATADIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon.cluster_config where variable='datadir' and cid=$CLUSTER_ID order by id asc limit 1"`
    MYCNF=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select data  from cmon.cluster_configuration where cid=$CLUSTER_ID limit 1"`

    echo $MYCNF |  sed 's#\\n#\n\r#g' > /tmp/my.cnf
    if [ "$MONITORED_MYSQL_PORT" = "" ] || [ "$MONITORED_MYSQL_PORT" = "NULL" ];  then
        MONITORED_MYSQL_PORT="3306"
    fi
    SSH_OPTS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -oNumberOfPasswordPrompts=0 -oConnectTimeout=10"
    if [ "$SSH_IDENTITY" = "" ]; then
	SSH_IDENTITY="-oIdentityFile=${OS_USER_HOME}/.ssh/id_rsa"
    else
	SSH_IDENTITY="-oIdentityFile=$SSH_IDENTITY"
    fi
    SSH_OPTS="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -oNumberOfPasswordPrompts=0 -oConnectTimeout=10 $SSH_IDENTITY"
    SSH_OPTS2="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -oNumberOfPasswordPrompts=0 -oConnectTimeout=10 $SSH_IDENTITY"
    if [ "$SSH_USER" != "root" ]; then
	if [ -z "$SSH_OPTSX" ] || [ "SSH_OPTSX" = "NULL" ]; then
	    SSH_OPTSX="-tt"
	fi
	SSH_OPTS=" -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -oNumberOfPasswordPrompts=0 -oConnectTimeout=10 $SSH_IDENTITY"
	if [ "$SUDO" = "" ] || [ "$SUDO" = "NULL" ];  then
           SUDO=sudo
        fi
    fi
    if [ "$SSH_PORT" = "" ] || [ "$SSH_PORT" = "NULL" ];  then
        SSH_PORT="22"
    fi
    if [ "AGENTLESS" = "" ] || [ "$AGENTLESS" = "NULL" ];  then
        AGENTLESS="0"
    fi
    SSH_OPTS="$SSH_OPTSX -p$SSH_PORT $SSH_OPTS"    
    SSH_OPTS2="-P$SSH_PORT $SSH_OPTS"    
}

function install_mysql
{
    args=`getopt p:i:P:a:h:g:d: $*`
    set -- $args
    for i
    do
	case "$i" in
            -p)
		CMON_PASSWORD="$2"; shift;
		shift;;
            -h)
		TARGET_HOSTNAME="$2"; shift;
		shift;;
            -d)
		DONOR="$2"; shift;
		shift;;
            -i)
		CLUSTER_ID="$2"; shift;
		shift;;
            -a)
		MYSQL_BINARY="$2"; shift;
		shift;;
            -g)
		GALERA_BINARY="$2"; shift;
		shift;;
	    -P)
		PORT="$2"; shift;
		shift;;
	esac
    done    
    
    if [ -z "$CLUSTER_ID" ]; then
	echo "s9s_clone "
	exit 1
    fi

    init
    if [ -z "$CMON_PASSWORD" ]; then
	echo "s9s_clone "
	exit 1
    fi

    if [ -z "$DONOR" ]; then
	echo "donor -d not set "
	exit 1
    fi
    
    if [ ! -f $MYSQL_BINARY ]; then
	echo "MYSQL BINARY NOT FOUND"
	exit 1
    fi

    if [ ! -f $GALERA_BINARY ]; then
	echo "GALERA LIBRARY NOT FOUND"
	exit 1
    fi

    if [ -z "$HOSTNAME" ]; then
	echo "s9s_clone "
	exit 1
    fi
    
    
    echo "NOT IMPLEMENTED"
    exit
    load_opts
    exit
}


function create_cluster
{    
    DETACH=0
    OPTIONS=$*
    args=`getopt p:s:P:h:t:N:j:D $*`
    set -- $args
    for i
    do
	case "$i" in
            -p)
		CMON_PASSWORD="$2"; shift;
		shift;;
            -t)
		TARGET_CLUSTER_ID="$2"; shift;
		shift;;
            -s)
		SOURCE_CLUSTER_ID="$2"; shift;
		shift;;
            -h)
		TARGET_HOSTNAME="$2"; shift;
		shift;;
            -N)
		CLUSTER_NAME="$2"; shift;
		shift;;
            -j)
		JOBID="$2"; shift;
		shift;;
            -D)
		DETACH=1; shift;
	esac
    done    
   
    CLUSTER_ID=${SOURCE_CLUSTER_ID} 
    init
    log_job 'RUNNING' 's9s_clone is running' 0
    log_job_message "Checking arguments" 0
    if [ -z "$CMON_PASSWORD" ]; then
	echo "s9s_clone --create -p  missing"
	exit 1
    fi
    
    if [ -z "$TARGET_HOSTNAME" ]; then
	log_job_message "s9s_clone --create  -h <source cluster hostname> missing" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi

    if [ -z "$TARGET_CLUSTER_ID" ]; then
      QUERY="select MAX(id)+1 FROM cluster"
      TARGET_CLUSTER_ID=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `           
    fi

    if [ -z "$CLUSTER_NAME" ]; then
	CLUSTER_NAME="CLONE_OF_${SOURCE_CLUSTER_ID}"
    fi

    if [ -z "$SOURCE_CLUSTER_ID" ]; then
      log_job_message "s9s_clone --create -s <source cluster id> missing" 1
      log_job 'FAILED' 's9s_clone --create failed' 1
      exit 1
    fi
    QUERY="select count(id) FROM mysql_server WHERE cid=${SOURCE_CLUSTER_ID}"
    CNT=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `           
    if [ $CNT -lt 2 ]; then
	log_job_message "Source cluster must contain 2 or more nodes." 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi
    log_job_message "Creating Cluster $CLUSTER_NAME (${TARGET_CLUSTER_ID}) From Cluster $SOURCE_CLUSTER_ID" 0
    log_job 'RUNNING' 's9s_clone --create is running' 0
    QUERY="select count(id) FROM cluster WHERE id=${TARGET_CLUSTER_ID}"
    CNT=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `    
    if [ $CNT -ne 0 ]; then
	echo "Cluster $TARGET_CLUSTER_ID already exists"
	log_job_message "Cluster $TARGET_CLUSTER_ID already exists" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi

    QUERY="select count(id) FROM cluster WHERE id=${SOURCE_CLUSTER_ID}"
    CNT=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `
    
    if [ $CNT -eq 0 ]; then
	log_job_message "Cluster $SOURCE_CLUSTER_ID does not exists" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi
    
    if [ $TARGET_CLUSTER_ID -eq 1 ]; then
	log_job_message "Cannot clone to cluster id = 1" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi

    if [ $TARGET_CLUSTER_ID -eq $SOURCE_CLUSTER_ID ]; then
	log_job_message "Source and target clusterid is the same" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi

    case $CLUSTER_TYPE in
	galera)
	    ;;
	*)
	    echo "Invalid cluster type - only galera is supported"
	    exit 1;	           	     
    esac
    load_opts $SOURCE_CLUSTER_ID 
    
    log_job 'RUNNING' 's9s_clone is running' 0

    check_host_exists  $TARGET_CLUSTER_ID  $TARGET_HOSTNAME

    QUERY="SHOW GLOBAL STATUS LIKE 'wsrep_local_state'"
    
    STATE=`$MYSQL_BIN $MYSQL_OPTS --user=$CMON_USER --password=$CMON_PASSWORD  --host=$TARGET_HOSTNAME --port=$MONITORED_MYSQL_PORT --auto-vertical-output -N -A -Bse "$QUERY"`
    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to get wsrep_local_state of $TARGET_HOSTNAME" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi
    if [ "$STATE" = "NULL" ]; then
	log_job_message "$TARGET_HOSTNAME not SYNCED" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi
    STATE=`echo $STATE | awk '{print $2;}'`    
    if [ $STATE -ne 4 ]; then
	log_job_message "$TARGET_HOSTNAME not SYNCED" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi
    
#    QUERY="CREATE DATABASE IF NOT EXISTS $CMON_DB_DB"
    
#    `$MYSQL_BIN $MYSQL_OPTS --user=$CMON_USER --password=$CMON_PASSWORD  --host=127.0.0.1 --port=$CMON_DB_PORT --auto-vertical-output -Bse "$QUERY"`
    
#    if [ $? -ne 0 ]; then
#	echo "Failed to create $CMON_DB_DB"
#	exit 1
#    fi
   # cp /usr/local/cmon/sql/cmon_db.sql /tmp/cmon_db.sql
   # cp /usr/local/cmon/sql/cmon_data.sql /tmp/cmon_data.sql
    
  #  sed -i.bak '/CREATE DATABASE IF/d' /tmp/cmon_db.sql
  #  sed -i.bak '/USE /d' /tmp/cmon_db.sql
  #  sed -i.bak '/USE /d' /tmp/cmon_data.sql

  #  `$MYSQL_BIN $MYSQL_OPTS --user=$CMON_USER --password=$CMON_PASSWORD  --host=127.0.0.1 --port=$PORT $CMON_DB_DB < /tmp/cmon_db.sql`
  #  `$MYSQL_BIN $MYSQL_OPTS --user=$CMON_USER --password=$CMON_PASSWORD  --host=127.0.0.1 --port=$PORT $CMON_DB_DB < /tmp/cmon_data.sql`
    log_job 'RUNNING' 's9s_clone --create is running' 0
    QUERY="DELETE FROM hosts WHERE cid=$TARGET_CLUSTER_ID;DELETE FROM hosts WHERE cid=0"
    `$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to clear (1)" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi

    QUERY="DELETE FROM hosts WHERE cid=$TARGET_CLUSTER_ID;DELETE FROM processes WHERE cid=0"
    `$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to clear (2)" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi

    QUERY="DELETE FROM mysql_server WHERE cid=$TARGET_CLUSTER_ID"    
    `$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to clear (3)" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi

    ##Lets' do the move in one transaction
    QUERY="BEGIN; INSERT INTO cluster(id, type) VALUES($TARGET_CLUSTER_ID, '$CLUSTER_TYPE')"    
    QUERY="$QUERY;INSERT IGNORE INTO cmon_configuration(cid, param, value) SELECT $TARGET_CLUSTER_ID, param,value  FROM cmon.cmon_configuration WHERE cid=${SOURCE_CLUSTER_ID}"    
    QUERY="$QUERY;INSERT IGNORE INTO cmon_sw_package(cid, packageid, name, rpm, selected) SELECT $TARGET_CLUSTER_ID,packageid, name, rpm, selected  FROM cmon.cmon_sw_package WHERE cid=${SOURCE_CLUSTER_ID}"    
    QUERY="$QUERY;INSERT INTO cmon_uploads(cid, packageid, filename,path,cluster_type,version_tag,md5sum,filesize, selected) SELECT $TARGET_CLUSTER_ID, packageid, filename,path,cluster_type,version_tag,md5sum,filesize, selected FROM cmon.cmon_uploads WHERE cid=${SOURCE_CLUSTER_ID}"    
    QUERY="$QUERY;INSERT IGNORE INTO expression_group(cid, name, created) SELECT $TARGET_CLUSTER_ID, name,created FROM cmon.expression_group WHERE cid=${SOURCE_CLUSTER_ID}"    
    QUERY="$QUERY;INSERT IGNORE INTO expression(cid, groupid, expression, result_var,advise) SELECT $TARGET_CLUSTER_ID, groupid, expression, result_var,advise FROM cmon.expression WHERE cid=${SOURCE_CLUSTER_ID}" 
    QUERY="$QUERY;REPLACE INTO cmon_configuration(cid, param, value) VALUES ($TARGET_CLUSTER_ID, \"CLUSTER_NAME\", \"${CLUSTER_NAME}\")"    
    QUERY="$QUERY;CALL sp_cmon_movehost(${TARGET_CLUSTER_ID}, ${HID})"
    QUERY="$QUERY;COMMIT"

    `$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to create cluster: $QUERY" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi
    
    log_job 'RUNNING' 's9s_clone --create is running' 0
    ## install config files
    SOURCE_CNF=""
    mkdir -p /etc/cmon.d
    if [ -f /etc/cmon.d/cmon_${SOURCE_CLUSTER_ID}.cnf ]; then
	cp /etc/cmon.d/cmon_${SOURCE_CLUSTER_ID}.cnf /etc/cmon.d/cmon_${TARGET_CLUSTER_ID}.cnf
	SOURCE_CNF=/etc/cmon.d/cmon_${SOURCE_CLUSTER_ID}.cnf
    else	
	if [ -f /etc/cmon.cnf ]; then
	    cp /etc/cmon.cnf /etc/cmon.d/cmon_${TARGET_CLUSTER_ID}.cnf
	    SOURCE_CNF=/etc/cmon.cnf
	else
	    log_job_message "No configuration file found" 1
	    log_job 'FAILED' 's9s_clone --create failed' 1
	fi
    fi
    
    sed -i.bak "s#cluster_id=.*#cluster_id=${TARGET_CLUSTER_ID}#g" /etc/cmon.d/cmon_${TARGET_CLUSTER_ID}.cnf
    sed -i.bak "s#logfile=.*#logfile=/var/log/cmon_${TARGET_CLUSTER_ID}.log#g" /etc/cmon.d/cmon_${TARGET_CLUSTER_ID}.cnf
    sed -i.bak "s#mysql_server_addresses=.*#mysql_server_addresses=${TARGET_HOSTNAME}#g" /etc/cmon.d/cmon_${TARGET_CLUSTER_ID}.cnf
    rm -rf /etc/cmon.d/cmon*.bak
    rm -rf /etc/cmon.cnf.bak
    
#    remote_cmd $TARGET_HOSTNAME "sed -i.bak 's#cluster_id=.*#cluster_id=${TARGET_CLUSTER_ID}#g' /etc/cmon.cnf"
    if [ "$AGENTLESS" = "0" ]; then
	remote_cmd $TARGET_HOSTNAME "/etc/init.d/cmon restart"
    fi
    
        
    case $OS in
	redhat)
	    echo "killall -HUP cmon"
	    ;;
	debian)
	    echo "killall -HUP cmon"
	    ;;
	*)
	    log_job_message "./s9s_create -- invalid OS (found: $OS)" 1
	    log_job 'FAILED' 's9s_clone --create failed' 1
	    exit 1;	           	     
    esac

    QUERY="SELECT GROUP_CONCAT(hostname) FROM mysql_server WHERE cid=$SOURCE_CLUSTER_ID"
    SERVERS=`$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to get mysql_server list" 1
	log_job 'FAILED' 's9s_clone --create failed' 1
	exit 1
    fi
    
    sed -i.bak "s#mysql_server_addresses=.*#mysql_server_addresses=${SERVERS}#g" $SOURCE_CNF
    rm -rf /etc/cmon.d/cmon*.bak
    rm -rf /etc/cmon.cnf.bak
    echo ""
    if [ $DETACH -eq 1 ]; then
	CLUSTER_ID=$TARGET_CLUSTER_ID
	create_job "s9s_clone --detach is running" "RUNNING" 0
	detach_cluster -i $TARGET_CLUSTER_ID  -h $TARGET_HOSTNAME -j $JOBID
	CLUSTER_ID=$SOURCE_CLUSTER_ID
    else
	log_job_message "Don't forget to detach cluster, by running:" 0
	log_job_message " s9s_clone --detach -i $TARGET_CLUSTER_ID -h $TARGET_HOSTNAME " 0    
    fi
    QUERY="UPDATE cluster SET parent_id=${CLUSTER_ID} WHERE id=$TARGET_CLUSTER_ID"
    $MYSQL_BIN  -B -N  --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" 2>&1 >/tmp/err.log
    log_job 'FINISHED' 's9s_clone --create finished successfully' 0
    echo ""
    killall -HUP cmon
}

## end create_cluster

function check_host_exists
{
    local TARGET_CID=$1
    local TARGET_HOSTNAME=$2
    local QUERY="select id from cmon.hosts where (hostname='$TARGET_HOSTNAME' OR ip='$TARGET_HOSTNAME') AND cid=${SOURCE_CLUSTER_ID}"
    HID=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`
    if [ $? -ne 0 ]; then
	log_job_message "$QUERY  - failed!" 1
	exit 1
    fi

    if [ -z "$HID" ]; then
	log_job_message "Server $TARGET_HOSTNAME does not exists" 1
	exit 1
    fi

    if [ "$HID" = "NULL" ]; then
	log_job_message "Server $TARGET_HOSTNAME does not exists" 1
	exit 1
    fi
    echo "Found hostid = $HID"

}


function delete_cluster
{
    FORCE=0
    args=`getopt p:i:P:t:j:f $*`
    set -- $args
    for i
    do
	case "$i" in
            -p)
		CMON_PASSWORD="$2"; shift;
		shift;;
            -i)
		CLUSTER_ID="$2"; shift;
		shift;;
            -f)
		FORCE=1; shift;
		shift;;
            -j)
		JOBID="$2"; shift;
		shift;;
	    -P)
		PORT="$2"; shift;
		shift;;
	esac
    done    
    if [ -z "$CLUSTER_ID" ]; then
	log_job_message "s9s_clone --delete -i <cluster id of cluster to be deleted> missing" 1
	log_job 'FAILED' 's9s_clone --delete failed' 1
	exit 1
    fi
    init

    log_job 'RUNNING' 's9s_clone --delete is running' 0
    log_job_message "Checking arguments" 0

    if [ -z "$CMON_PASSWORD" ]; then
	log_job_message "s9s_clone --delete -p  missing" 1
	log_job 'FAILED' 's9s_clone --delete failed' 1
	exit 1
    fi
    
    if [ $FORCE -eq 0 ]; then
      if [ $CLUSTER_ID -eq 1 ]; then
	  log_job_message "Cowardly refusing to delete cluster 1, if you really want to do this, modify the script" 1
  	  log_job 'FAILED' 's9s_clone --delete failed' 1
 	  exit 1
      fi
    fi

##    CMON_DB_DB="cmon_${CLUSTER_ID}"
    
    case $CLUSTER_TYPE in
	galera)
	    ;;
	*)
	    log_job_message "./s9s_clone --delete only galera is supported" 1
	    log_job 'FAILED' 's9s_clone --delete failed' 1
	    exit 1;	           	     
    esac
    load_opts $CLUSTER_ID
    NAME=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='CLUSTER_NAME' AND cid=$CLUSTER_ID"`

    QUERY="select count(id) FROM mysql_server WHERE cid=${CLUSTER_ID}"
    CNT=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `           
    if [ $CNT -gt 0 ]; then
	log_job_message "Cluster $NAME (clusterid=${CLUSTER_ID}) contains running nodes. Remove the nodes or move them to other clusters before deleting the cluster." 1
	log_job 'FAILED' 's9s_clone --delete failed' 1
	exit 1
    fi
    


    QUERY="select group_concat(hostname SEPARATOR ' ') from ${CMON_DB_DB}.mysql_server where cid=${CLUSTER_ID}"
    SERVER_LIST=`$MYSQL_BIN $MYSQL_OPTS --user=$CMON_USER --password=$CMON_PASSWORD  --host=127.0.0.1 --port=$CMON_DB_PORT --auto-vertical-output -Bse "$QUERY"`
    QUERY="CALL ${CMON_DB_DB}.sp_cmon_deletecluster(${CLUSTER_ID})"
    $MYSQL_BIN $MYSQL_OPTS --user=$CMON_USER --password=$CMON_PASSWORD  --host=127.0.0.1 --port=$CMON_DB_PORT --auto-vertical-output -Bse "$QUERY"
    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to delete cluster" 1
	exit 1
    fi

    if [ -z "$OS" ]; then
	if [ `hash update-rc.d 2>/dev/null`  ]; then
	    OS="redhat"
	else
	    OS="debian"
	fi	
    fi
    if [ "$SERVER_LIST" != "NULL" ]; then
	for host in $SERVER_LIST
	do
	    if [ -n "$DATADIR" ]; then
		remote_cmd_nofail $host "rm -rf $DATADIR"
	    fi
	    remote_cmd_nofail $host "rm -rf /var/log/cmon_*"
	    remote_cmd_nofail $host "rm -rf /etc/cmon.cnf*"
	done
    fi
    rm -rf /etc/cmon.d/cmon*${CLUSTER_ID}.cnf*
    rm -rf /etc/cmon.cnf.bak
    killall -HUP cmon
    log_job 'FINISHED' 's9s_clone --delete finished successfully' 0
}


function list_cluster
{
    CLUSTER_ID=1
    init
    QUERY="select group_concat(id SEPARATOR ' ') FROM cluster"    
    RESULT=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `           

    if [ "$RESULT" = "NULL" ]; then
	echo "No clusters exists"
	exit 1
    fi
    echo "Available clusters:"
    echo "cluster-id    size    name"
    echo "--------------------------"
    for i in $RESULT 
    do
	NAME=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "select value from cmon_configuration where param='CLUSTER_NAME' AND cid=$i"`
	QUERY="select count(id) FROM mysql_server WHERE cid=$i"    
	SZ=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `           
	echo "$i               $SZ     $NAME"
    done

}

function move_node
{
    args=`getopt p:s:h:t:j: $*`
    set -- $args
    for i
    do
	case "$i" in
            -p)
		CMON_PASSWORD="$2"; shift;
		shift;;
            -s)
		CLUSTER_ID="$2"; shift;
		SOURCE_CLUSTER_ID=$CLUSTER_ID
		shift;;
            -t)
		TARGET_CLUSTER_ID="$2"; shift;
		shift;;
            -h)
		SOURCE_HOSTNAME="$2"; shift;
		shift;;
	    -j)
		JOBID="$2"; shift;
		shift;;
	esac
    done    
    if [ -z "$CLUSTER_ID" ]; then
      log_job_message "s9s_clone  --move-node -s <source clusterid> missing" 1
      log_job 'FAILED' 's9s_clone --move-node failed' 1
      exit 1
    fi
    init

    log_job 'RUNNING' 's9s_clone --move-node is running' 0
    log_job_message "Checking arguments" 0
    
    if [ -z "$CMON_PASSWORD" ]; then
      log_job_message "s9s_clone  --move-node  -p  missing" 1
      log_job 'FAILED' 's9s_clone --move-node failed' 1
      exit 1
    fi

    if [ -z "$TARGET_CLUSTER_ID" ]; then
      log_job_message "s9s_clone --move-node -t <target clusterid> missing" 1
      log_job 'FAILED' 's9s_clone --move-node failed' 1
      exit 1
    fi

    if [ "$TARGET_CLUSTER_ID" = "$SOURCE_CLUSTER_ID" ]; then
      log_job_message "s9s_clone  --move-node  source and target is the same!" 1
      log_job 'FAILED' 's9s_clone --move-node failed' 1
      exit 1
    fi

    if [ -z "$SOURCE_HOSTNAME" ]; then
      log_job_message "s9s_clone  --move-node  -h <source cluster hostname> missing" 1
      log_job 'FAILED' 's9s_clone --move-node failed' 1
      exit 1
    fi
    
    QUERY="select count(id) FROM cluster WHERE id=${TARGET_CLUSTER_ID}"
    CNT=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `           
    if [ $CNT -eq 0 ]; then
	log_job_message "Cluster $TARGET_CLUSTER_ID does not exist, use s9s_clone --create first" 1
	log_job 'FAILED' 's9s_clone --move-node failed' 1
	exit 1
    fi
    
    QUERY="select id from cmon.hosts where (hostname='$SOURCE_HOSTNAME' OR ip='$SOURCE_HOSTNAME') AND cid=${SOURCE_CLUSTER_ID}"
    local HID=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`

    if [ -z "$HID" ]; then
	log_job_message "Server $SOURCE_HOSTNAME does not exists in cluster $SOURCE_CLUSTER_ID" 1
	log_job 'FAILED' 's9s_clone --move-node failed' 1
	exit 1
    fi

    if [ "$HID" = "NULL" ]; then
	log_job_message "Server $SOURCE_HOSTNAME does not exists in cluster $SOURCE_CLUSTER_ID" 1
	log_job 'FAILED' 's9s_clone --move-node failed' 1
	exit 1
    fi
    
    load_opts $SOURCE_CLUSTER_ID
    check_host_exists $TARGET_CLUSTER_ID $SOURCE_HOSTNAME   

    QUERY="DELETE FROM processes WHERE cid=0"
    `$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to clear" 1
	log_job 'FAILED' 's9s_clone --move-node failed' 1
	exit 1
    fi
    QUERY="BEGIN; CALL sp_cmon_deletehost(${TARGET_CLUSTER_ID}, ${HID})"
    QUERY="$QUERY;CALL sp_cmon_movehost(${TARGET_CLUSTER_ID}, ${HID})"    
    QUERY="$QUERY;CALL sp_cmon_deletehost($SOURCE_CLUSTER_ID, $HID); COMMIT"
    `$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to migrate host: $QUERY" 1
	log_job 'FAILED' 's9s_clone --move-node failed' 1
	exit 1
    fi	

    QUERY="select count(id) FROM mysql_server WHERE cid=${TARGET_CLUSTER_ID}"
    CNT=`$MYSQL_BIN  -A -B -N --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT  -e "$QUERY" `
    
    if [ $CNT -eq 0 ]; then 
	## IF THE CLUSTER WE MOVE THE NODE TO IS EMPTY, THEN INIT THE GALERA NODE
	QUERY="SET WSREP_ON=0;SET GLOBAL wsrep_cluster_address='gcomm://'"	    
	`$MYSQL_BIN $MYSQL_OPTS --user=$CMON_USER --password=$CMON_PASSWORD  --host=$SOURCE_HOSTNAME --port=$MONITORED_MYSQL_PORT --auto-vertical-output -Bse "$QUERY"`	    
	if [ $? -ne 0 ]; then
	    log_job_message "Failed to create galera cluster on $TARGET_CLUSTER_ID" 1
	    log_job 'FAILED' 's9s_clone --move-node failed' 1
	    exit 1
	fi
    else	    
	DATADIR=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --host=$SOURCE_HOSTNAME --port=$MONITORED_MYSQL_PORT -e "SHOW GLOBAL VARIABLES LIKE 'datadir'" | awk '{print $2;}'`
	log_job_message "Stopping mysql server on $SOURCE_HOSTNAME - ClusterControl will resync it" 0
	remote_cmd_nofail $SOURCE_HOSTNAME "killall -q -15 mysqld mysqld_safe"
    fi

    if [ "$AGENTLESS" = "0" ]; then
	remote_cmd $SOURCE_HOSTNAME "sed -i.bak 's#cluster_id=.*#cluster_id=${TARGET_CLUSTER_ID}#g' /etc/cmon.cnf"
	remote_cmd $SOURCE_HOSTNAME "/etc/init.d/cmon restart"
    fi

    QUERY="SELECT GROUP_CONCAT(hostname) FROM mysql_server WHERE cid=$TARGET_CLUSTER_ID"
    SERVERS=`$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`    
    if [ $? -ne 0 ]; then
	log_job_message "Failed to get mysql_server list" 1
	log_job 'FAILED' 's9s_clone --move-node failed' 1
	exit 1
    fi

    if [ $TARGET_CLUSTER_ID -eq 1 ]; then
	if [ -f  /etc/cmon.d/cmon_${TARGET_CLUSTER_ID}.cnf ]; then 
	    sed -i.bak "s#mysql_server_addresses=.*#mysql_server_addresses=${SERVERS}#g" /etc/cmon.d/cmon_${TARGET_CLUSTER_ID}.cnf
	else
	    sed -i.bak "s#mysql_server_addresses=.*#mysql_server_addresses=${SERVERS}#g" /etc/cmon.cnf
	fi
    else
	sed -i.bak "s#mysql_server_addresses=.*#mysql_server_addresses=${SERVERS}#g" /etc/cmon.d/cmon_${TARGET_CLUSTER_ID}.cnf
    fi

    QUERY="SELECT GROUP_CONCAT(hostname) FROM mysql_server WHERE cid=$SOURCE_CLUSTER_ID"
    SERVERS=`$MYSQL_BIN $MYSQL_OPTS -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`
    if [ $? -ne 0 ]; then
	log_job_message "Failed to get mysql_server list" 1
	log_job 'FAILED' 's9s_clone --move-node failed' 1
	exit 1
    fi
    if [ -f /etc/cmon.d/cmon_${SOURCE_CLUSTER_ID}.cnf ]; then 
	sed -i.bak "s#mysql_server_addresses=.*#mysql_server_addresses=${SERVERS}#g" /etc/cmon.d/cmon_${SOURCE_CLUSTER_ID}.cnf
    else
	sed -i.bak "s#mysql_server_addresses=.*#mysql_server_addresses=${SERVERS}#g" /etc/cmon.cnf
    fi

    if [ -n "$DATADIR" ]; then
	remote_cmd_nofail $SOURCE_HOSTNAME "rm -rf ${DATADIR}/grastate.dat"
    fi
    
    rm -rf /etc/cmon.d/cmon*.bak
    rm -rf /etc/cmon.cnf.bak
    killall -HUP cmon
    log_job_message "Node moved - follow recovery progress in GUI" 0
    log_job 'FINISHED' 's9s_clone --move-node finished successfully' 0
}

function detach_cluster
{
    args=`getopt p:i:P:t:h:j: $*`
    set -- $args
    for i
    do
	case "$i" in
            -p)
		CMON_PASSWORD="$2"; shift;
		shift;;
            -i)
		CLUSTER_ID="$2"; shift;
		shift;;
            -h)
		TARGET_HOSTNAME="$2"; shift;
		shift;;
	    -P)
		PORT="$2"; shift;
		shift;;
	    -j)
		JOBID="$2"; shift;
		shift;;
	esac
    done    
    if [ -z "$CLUSTER_ID" ]; then
	log_job_message "s9s_clone --detach -i <clusterid> missing" 1
	log_job 'FAILED' 's9s_clone --detach failed' 1
	exit 1
    fi
    init

    log_job 'RUNNING' 's9s_clone --detach is running' 0
    log_job_message "Checking arguments" 0

    if [ -z "$CMON_PASSWORD" ]; then
	log_job_message "s9s_clone --detach -p  missing" 1
	log_job 'FAILED' 's9s_clone --detach failed' 1
	exit 1
    fi
    
    if [ -z "$TARGET_HOSTNAME" ]; then
	log_job_message "s9s_clone --detach -h <hostname> missing" 1
	log_job 'FAILED' 's9s_clone --detach failed' 1
	exit 1
    fi


#    if [ -z "$PORT" ]; then
#      log_job_message "s9s_clone -P <target server mysql port> is  missing"
#       exit 1
#    fi


##    CMON_DB_DB="cmon_${CLUSTER_ID}"
    
    case $CLUSTER_TYPE in
	galera)
	    ;;
	*)
	    log_job_message "Invalid cluster type - only galera is supported" 1
	    log_job 'FAILED' 's9s_clone --detach failed' 1
	    exit 1;	           	     
    esac
   

    QUERY="select id from cmon.hosts where (hostname='$TARGET_HOSTNAME' OR ip='$TARGET_HOSTNAME') AND cid=${CLUSTER_ID}"
    local HID=`$MYSQL_BIN -N -B -A --user=$CMON_USER --password=$CMON_PASSWORD --database=$CMON_DB_DB --host=$CMON_DB_HOST --port=$CMON_DB_PORT -e "$QUERY"`

    if [ -z "$HID" ]; then
        log_job_message "Server $TARGET_HOSTNAME does not exists in cluster $CLUSTER_ID" 1
	log_job 'FAILED' 's9s_clone --detach failed' 1
        exit 1
    fi
    log_job 'RUNNING' 's9s_clone --detach is running' 0
    QUERY="SET GLOBAL wsrep_cluster_address='gcomm://'"    
    `$MYSQL_BIN $MYSQL_OPTS --user=$CMON_USER --password=$CMON_PASSWORD  --host=$TARGET_HOSTNAME --port=$MONITORED_MYSQL_PORT --auto-vertical-output -Bse "$QUERY"`   
    if [ $? -ne 0 ]; then
	log_job_message "Failed to detach cluster" 1
	log_job 'FAILED' 's9s_clone --detach failed' 1
	exit 1
    fi

    log_job_message "Detached cluster." 0
    log_job 'FINISHED' 's9s_clone --detach finished successfully' 0
}

function check_mysql_client()
{
   if [ ! -f $MYSQL_BIN ]; then
        # Try normal locations:
        MYSQL_BIN="/usr/bin/mysql"
        if [ ! -f $MYSQL_BIN ]; then
             MYSQL_BIN="/usr/local/mysql/bin/mysql"
             if [ ! -f $MYSQL_BIN ]; then
		 echo "The MySQL client binary could not be found"         
		 if [ "$mysql_basedir" = "" ]; then
		     echo "mysql_basedir in /etc/cmon.cnf is not set. Add it to /etc/cmon.cnf"
		     exit 1		     
		 fi
             fi
	fi
   fi
}

if [ ! -e $LOCKFILE ]; then
    trap "rm -f $LOCKFILE; sync; exit" INT TERM EXIT
    touch $LOCKFILE
    
    check_mysql_client		 
    
    ARG=$1
    shift
    
    case $ARG in
	--list)
	    list_cluster  $*
	    ;;
	--create)
	    create_cluster  $*
	    ;;
	--detach)
	    detach_cluster  $*
	    ;;
	--move-node)
	    move_node  $*
	    ;;
	--delete)
	    delete_cluster  $*
	    ;;
	*)
	    echo "Usage: "
	    echo "s9s_clone --[create|delete|detach|move-node|list]: "
	    exit 1
	    ;;
    esac
    rm -f $LOCKFILE
    sync
    trap - INT TERM EXIT
fi

