mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			169 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
. /etc/rc.d/init.d/functions
 | 
						|
 | 
						|
#set -x
 | 
						|
 | 
						|
usage() {
 | 
						|
  printf "\nThe tool stopping/starting running system vms and domain routers \n\nUsage: %s: [-d] [-u] [-p] [-m] [-s] [-r] [-a] \n\n -d - cloud DB server ip address, defaulted to localhost if not specified \n -u - user name to access cloud DB, defaulted to "root" if not specified \n -p - cloud DB user password, defaulted to no password if not specified \n\n -m - the ip address of management server, defaulted to localhost if not specified\n\n -s - stop then start all running SSVMs and Console Proxies \n -r - stop then start all running Virtual Routers\n -a - stop then start all running SSVMs, Console Proxies, and Virtual Routers\n\n" $(basename $0) >&2
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
system=
 | 
						|
router=
 | 
						|
all=
 | 
						|
db=localhost
 | 
						|
ms=localhost
 | 
						|
user=root
 | 
						|
password=
 | 
						|
help=
 | 
						|
 | 
						|
 | 
						|
while getopts 'sarhd:m:u:p:' OPTION
 | 
						|
do
 | 
						|
  case $OPTION in
 | 
						|
  s)    system=1
 | 
						|
        ;;
 | 
						|
  r)    router=1
 | 
						|
        ;;
 | 
						|
  a)    all=1
 | 
						|
        ;;
 | 
						|
  d)    db="$OPTARG"
 | 
						|
        ;;
 | 
						|
  u)    user="$OPTARG"
 | 
						|
        ;;
 | 
						|
  p)    password="$OPTARG"
 | 
						|
        ;;
 | 
						|
  h)    help=1
 | 
						|
        ;;
 | 
						|
  m)    ms="$OPTARG"
 | 
						|
  esac
 | 
						|
done
 | 
						|
 | 
						|
 | 
						|
stop_start_system() {
 | 
						|
secondary=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select id from vm_instance where state=\"Running\" and type=\"SecondaryStorageVm\""`)
 | 
						|
console=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select id from vm_instance where state=\"Running\" and type=\"ConsoleProxy\""`)
 | 
						|
length_secondary=(${#secondary[@]})
 | 
						|
length_console=(${#console[@]})
 | 
						|
 | 
						|
 | 
						|
echo -e "\nStopping and starting secondary storage vms..."
 | 
						|
for d in "${secondary[@]}"; do
 | 
						|
	jobresult=$(send_request stopSystemVm $d)
 | 
						|
	if [ "$jobresult" != "1" ]; then
 | 
						|
		echo "ERROR: Failed to stop secondary storage vm with id $d"
 | 
						|
	else	
 | 
						|
		jobresult=$(send_request startSystemVm $d)
 | 
						|
		if [ "$jobresult" != "1" ]; then
 | 
						|
                	echo "ERROR: Failed to start secondary storage vm with id $d"
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
done
 | 
						|
 | 
						|
if [ "$length_secondary" == "0" ];then
 | 
						|
	echo -e "No running secondary storage vms found \n"
 | 
						|
else 
 | 
						|
	echo -e "Done \n"
 | 
						|
fi
 | 
						|
 | 
						|
echo "Stopping and starting console proxy vms..."
 | 
						|
for d in "${console[@]}"; do
 | 
						|
    jobresult=$(send_request stopSystemVm $d)
 | 
						|
	if [ "$jobresult" != "1" ]; then
 | 
						|
                echo "ERROR: Failed to stop console proxy vm with id $d"
 | 
						|
        else	
 | 
						|
		jobresult=$(send_request startSystemVm $d)
 | 
						|
                if [ "$jobresult" != "1" ]; then
 | 
						|
                        echo "ERROR: Failed to start console proxy vm with id $d"
 | 
						|
                fi
 | 
						|
        fi
 | 
						|
done
 | 
						|
 | 
						|
if [ "$length_console" == "0" ];then
 | 
						|
        echo -e "No running console proxy vms found \n"
 | 
						|
else
 | 
						|
        echo -e "Done \n"
 | 
						|
fi
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
stop_start_router() {
 | 
						|
router=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select id from vm_instance where state=\"Running\" and type=\"DomainRouter\""`)
 | 
						|
length_router=(${#router[@]})
 | 
						|
 | 
						|
echo -e "\nStopping and starting running routing vms..."
 | 
						|
for d in "${router[@]}"; do
 | 
						|
        jobresult=$(send_request stopRouter $d)
 | 
						|
        if [ "$jobresult" != "1" ]; then
 | 
						|
                echo "ERROR: Failed to stop domain router with id $d"
 | 
						|
        else
 | 
						|
		jobresult=$(send_request startRouter $d)
 | 
						|
                if [ "$jobresult" != "1" ]; then
 | 
						|
                        echo "ERROR: Failed to start domain router with id $d"
 | 
						|
                fi
 | 
						|
        fi
 | 
						|
done
 | 
						|
 | 
						|
if [ "$length_router" == "0" ];then
 | 
						|
        echo -e "No running router vms found \n"
 | 
						|
else
 | 
						|
        echo -e "Done \n"
 | 
						|
fi
 | 
						|
}
 | 
						|
 | 
						|
stop_start_all() {
 | 
						|
stop_start_system
 | 
						|
stop_start_router
 | 
						|
}
 | 
						|
 | 
						|
send_request(){
 | 
						|
jobid=`curl -sS "http://$ms:8096/?command=$1&id=$2&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F: {'print $3'}`
 | 
						|
if [ "$jobid" == "" ]; then
 | 
						|
	echo 2
 | 
						|
	return
 | 
						|
fi
 | 
						|
jobresult=$(query_async_job_result $jobid)
 | 
						|
echo $jobresult
 | 
						|
}
 | 
						|
 | 
						|
query_async_job_result() {
 | 
						|
while [ 1 ]
 | 
						|
do
 | 
						|
	jobstatus=`curl -sS "http://$ms:8096/?command=queryAsyncJobResult&jobId=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F, {'print $2'} | awk -F: {'print $2'}`
 | 
						|
	if [ "$jobstatus" != "0" ]; then
 | 
						|
		echo $jobstatus
 | 
						|
		break
 | 
						|
	fi
 | 
						|
sleep 5
 | 
						|
done
 | 
						|
}
 | 
						|
 | 
						|
if [ "$system$router$all$help" == "" ]
 | 
						|
then
 | 
						|
  usage
 | 
						|
  exit
 | 
						|
fi
 | 
						|
 | 
						|
if  [ "$help" == "1" ]
 | 
						|
then
 | 
						|
    usage
 | 
						|
    exit
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$all" == "1" ]
 | 
						|
then
 | 
						|
      stop_start_all
 | 
						|
      exit
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$system" == "1" ]
 | 
						|
then
 | 
						|
      stop_start_system
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$router" == "1" ]
 | 
						|
then
 | 
						|
      stop_start_router
 | 
						|
fi
 |