cloudstack/setup/bindir/cloud-sysvmadm.in
2011-05-13 14:14:44 -07:00

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