This is an automated email from the ASF dual-hosted git repository. dahn pushed a commit to branch 4.19 in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push: new cfbdeba17c7 refactor: cloud-sysvmadm script (#9200) cfbdeba17c7 is described below commit cfbdeba17c7038c3c72baeba7192301e30a4ad50 Author: Abhishek Kumar <abhishek.mr...@gmail.com> AuthorDate: Wed Sep 18 17:14:43 2024 +0530 refactor: cloud-sysvmadm script (#9200) Signed-off-by: Abhishek Kumar <abhishek.mr...@gmail.com> --- setup/bindir/cloud-sysvmadm.in | 282 +++++++++++++++++++++-------------------- 1 file changed, 143 insertions(+), 139 deletions(-) diff --git a/setup/bindir/cloud-sysvmadm.in b/setup/bindir/cloud-sysvmadm.in index a5bb9b37ac1..a262f6b710e 100755 --- a/setup/bindir/cloud-sysvmadm.in +++ b/setup/bindir/cloud-sysvmadm.in @@ -18,13 +18,11 @@ # under the License. -. /etc/rc.d/init.d/functions - #set -x usage() { usage_content=" - The tool for stopping/starting running system vms and domain routers + The tool for stopping/starting running system vms and domain routers. It requires integration API port to be enabled. Usage: %s: [-d] [-u] [-p] [-m] [-s] [-r] [-a] [-n] [-t] [-l] [-z] [-v] [-i] [-j] @@ -63,6 +61,7 @@ vmids="" vmidsclause="" withids="" vmtable="vm_instance" +integrationport=0 @@ -104,6 +103,12 @@ do done +integrationport=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "SELECT value FROM configuration WHERE name='integration.api.port'"`) +if [ $integrationport -le 0 ]; then + echo "Integration port is not enabled!" + exit +fi + prepare_ids_clause() { if [[ ! -z "$vmidsclause" ]]; then return @@ -117,168 +122,167 @@ prepare_ids_clause() { stop_start_system() { prepare_ids_clause -secondary=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select id from $vmtable where state=\"Running\" and type=\"SecondaryStorageVm\"$zone$vmidsclause"`) -console=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select id from $vmtable where state=\"Running\" and type=\"ConsoleProxy\"$zone$vmidsclause"`) -length_secondary=(${#secondary[@]}) -length_console=(${#console[@]}) - - -echo -e "\nStopping and starting $length_secondary secondary storage vm(s)$inzone$withids..." -echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Stopping and starting $length_secondary secondary storage vm(s)$inzone$withids..." >>$LOGFILE - -for d in "${secondary[@]}"; do - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Stopping secondary storage vm with id $d" >>$LOGFILE - jobresult=$(send_request stopSystemVm $d) - if [ "$jobresult" != "1" ]; then - echo -e "ERROR: Failed to stop secondary storage vm with id $d \n" - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to stop secondary storage vm with id $d" >>$LOGFILE - else - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Starting secondary storage vm with id $d" >>$LOGFILE - jobresult=$(send_request startSystemVm $d SSVM) - if [ "$jobresult" != "1" ]; then - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to start secondary storage vm with id $d" >>$LOGFILE - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to start secondary storage vm with id $d" >>$LOGFILE - fi - fi -done + secondary=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select uuid from $vmtable where state=\"Running\" and type=\"SecondaryStorageVm\"$zone$vmidsclause"`) + console=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select uuid from $vmtable where state=\"Running\" and type=\"ConsoleProxy\"$zone$vmidsclause"`) + length_secondary=(${#secondary[@]}) + length_console=(${#console[@]}) + + + echo -e "\nStopping and starting $length_secondary secondary storage vm(s)$inzone$withids..." + echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Stopping and starting $length_secondary secondary storage vm(s)$inzone$withids..." >>$LOGFILE + + for d in "${secondary[@]}"; do + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Stopping secondary storage vm with id $d" >>$LOGFILE + jobresult=$(send_request stopSystemVm $d) + if [ "$jobresult" != "1" ]; then + echo -e "ERROR: Failed to stop secondary storage vm with id $d \n" + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to stop secondary storage vm with id $d" >>$LOGFILE + else + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Starting secondary storage vm with id $d" >>$LOGFILE + jobresult=$(send_request startSystemVm $d SSVM) + if [ "$jobresult" != "1" ]; then + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to start secondary storage vm with id $d" >>$LOGFILE + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to start secondary storage vm with id $d" >>$LOGFILE + fi + fi + done -if [ "$length_secondary" == "0" ];then - echo -e "No running secondary storage vms found \n" -else - echo -e "Done stopping and starting secondary storage vm(s)$inzone$withids" - echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Done stopping and starting secondary storage vm(s)$inzone$withids." >>$LOGFILE -fi + if [ "$length_secondary" == "0" ];then + echo -e "No running secondary storage vms found \n" + else + echo -e "Done stopping and starting secondary storage vm(s)$inzone$withids" + echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Done stopping and starting secondary storage vm(s)$inzone$withids." >>$LOGFILE + fi -echo -e "\nStopping and starting $length_console console proxy vm(s)$inzone$withids..." -echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Stopping and starting $length_console console proxy vm(s)$inzone$withids..." >>$LOGFILE + echo -e "\nStopping and starting $length_console console proxy vm(s)$inzone$withids..." + echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Stopping and starting $length_console console proxy vm(s)$inzone$withids..." >>$LOGFILE + + for d in "${console[@]}"; do + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Stopping console proxy with id $d" >>$LOGFILE + jobresult=$(send_request stopSystemVm $d) + if [ "$jobresult" != "1" ]; then + echo -e "ERROR: Failed to stop console proxy vm with id $d \n" + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to stop console proxy vm with id $d" >>$LOGFILE + else + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Starting console proxy vm with id $d" >>$LOGFILE + jobresult=$(send_request startSystemVm $d consoleProxy) + if [ "$jobresult" != "1" ]; then + echo -e "ERROR: Failed to start console proxy vm with id $d \n" + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to start console proxy vm with id $d" >>$LOGFILE + fi + fi + done -for d in "${console[@]}"; do - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Stopping console proxy with id $d" >>$LOGFILE - jobresult=$(send_request stopSystemVm $d) - if [ "$jobresult" != "1" ]; then - echo -e "ERROR: Failed to stop console proxy vm with id $d \n" - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to stop console proxy vm with id $d" >>$LOGFILE + if [ "$length_console" == "0" ];then + echo -e "No running console proxy vms found \n" else - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Starting console proxy vm with id $d" >>$LOGFILE - jobresult=$(send_request startSystemVm $d consoleProxy) - if [ "$jobresult" != "1" ]; then - echo -e "ERROR: Failed to start console proxy vm with id $d \n" - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to start console proxy vm with id $d" >>$LOGFILE - fi + echo "Done stopping and starting console proxy vm(s) $inzone$withids." + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] Done stopping and starting console proxy vm(s) $inzone$withids." >>$LOGFILE fi -done - -if [ "$length_console" == "0" ];then - echo -e "No running console proxy vms found \n" -else - echo "Done stopping and starting console proxy vm(s) $inzone$withids." - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] Done stopping and starting console proxy vm(s) $inzone$withids." >>$LOGFILE -fi } stop_start_router() { prepare_ids_clause - 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\"$zone$vmidsclause"`) - length_router=(${#router[@]}) + router=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select uuid from vm_instance where state=\"Running\" and type=\"DomainRouter\"$zone$vmidsclause"`) + length_router=(${#router[@]}) - echo -e "\nStopping and starting $length_router running routing vm(s)$inzone$withids... " - echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Stopping and starting $length_router running routing vm(s)$inzone$withids... " >>$LOGFILE + echo -e "\nStopping and starting $length_router running routing vm(s)$inzone$withids... " + echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Stopping and starting $length_router running routing vm(s)$inzone$withids... " >>$LOGFILE - #Spawn reboot router in parallel - run commands in <n> chunks - number of threads is configurable + #Spawn reboot router in parallel - run commands in <n> chunks - number of threads is configurable - pids=() - for d in "${router[@]}"; do + pids=() + for d in "${router[@]}"; do - reboot_router $d & + reboot_router $d & - pids=( "${pids[@]}" $! ) + pids=( "${pids[@]}" $! ) - length_pids=(${#pids[@]}) - unfinishedPids=(${#pids[@]}) + length_pids=(${#pids[@]}) + unfinishedPids=(${#pids[@]}) - if [ $maxthreads -gt $length_router ]; then - maxthreads=$length_router - fi + if [ $maxthreads -gt $length_router ]; then + maxthreads=$length_router + fi - if [ $length_pids -ge $maxthreads ]; then - while [ $unfinishedPids -gt 0 ]; do - sleep 10 - count=0 - for (( i = 0 ; i < $length_pids; i++ )); do - if ! ps ax | grep -v grep | grep ${pids[$i]} > /dev/null; then - count=`expr $count + 1` - fi - done + if [ $length_pids -ge $maxthreads ]; then + while [ $unfinishedPids -gt 0 ]; do + sleep 10 + count=0 + for (( i = 0 ; i < $length_pids; i++ )); do + if ! ps ax | grep -v grep | grep ${pids[$i]} > /dev/null; then + count=`expr $count + 1` + fi + done - if [ $count -eq $unfinishedPids ]; then - unfinishedPids=0 - fi + if [ $count -eq $unfinishedPids ]; then + unfinishedPids=0 + fi - done + done - #remove all elements from pids - if [ $unfinishedPids -eq 0 ]; then - pids=() - length_pids=(${#pids[@]}) - fi + #remove all elements from pids + if [ $unfinishedPids -eq 0 ]; then + pids=() + length_pids=(${#pids[@]}) + fi - fi + fi - done + done - if [ "$length_router" == "0" ];then - echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] No running router vms found \n" >>$LOGFILE - else - while [ $unfinishedPids -gt 0 ]; do - sleep 10 - done + if [ "$length_router" == "0" ];then + echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] No running router vms found \n" >>$LOGFILE + else + while [ $unfinishedPids -gt 0 ]; do + sleep 10 + done - echo -e "Done restarting router(s)$inzone$withids. \n" - echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Done restarting router(s)$inzone$withids. \n" >>$LOGFILE + echo -e "Done restarting router(s)$inzone$withids. \n" + echo -e "[$(date "+%Y.%m.%d-%H.%M.%S")] Done restarting router(s)$inzone$withids. \n" >>$LOGFILE - fi + fi } stop_start_all() { -stop_start_system -stop_start_router + 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) + jobid=`curl -sS "http://$ms:$integrationport/?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) if [ "$jobresult" != "1" ]; then echo -e "ERROR: Failed to $1 id=$2; jobId is $jobid \n" echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to $1 id=$2; jobId is $jobid" >>$LOGFILE fi - echo $jobresult + echo $jobresult } reboot_router(){ - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Restarting router with id $1" >>$LOGFILE - jobid=`curl -sS "http://$ms:8096/?command=rebootRouter&id=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F: {'print $3'}` - if [ "$jobid" == "" ]; then - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to restart domainRouter with id $1; unable to submit the job" >>$LOGFILE - echo 2 - return - fi - - jobresult=$(query_async_job_result $jobid) - - if [ "$jobresult" != "1" ]; then - echo -e "ERROR: Failed to restart domainRouter with id $1 \n" - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to restart domainRouter with id $1; jobId $jobid" >>$LOGFILE - exit 0 - else - echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Successfully restarted domainRouter with id $1; jobId $jobid" >>$LOGFILE - exit 0 - fi + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Restarting router with id $1" >>$LOGFILE + jobid=`curl -sS "http://$ms:$integrationport/?command=rebootRouter&id=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F: {'print $3'}` + if [ "$jobid" == "" ]; then + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to restart domainRouter with id $1; unable to submit the job" >>$LOGFILE + echo 2 + return + fi + + jobresult=$(query_async_job_result $jobid) + if [ "$jobresult" != "1" ]; then + echo -e "ERROR: Failed to restart domainRouter with id $1 \n" + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to restart domainRouter with id $1; jobId $jobid" >>$LOGFILE + exit 0 + else + echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Successfully restarted domainRouter with id $1; jobId $jobid" >>$LOGFILE + exit 0 + fi } restart_networks(){ @@ -346,7 +350,7 @@ restart_networks(){ } restart_network(){ - jobid=`curl -sS "http://$ms:8096/?command=restartNetwork&id=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F: {'print $3'}` + jobid=`curl -sS "http://$ms:$integrationport/?command=restartNetwork&id=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F: {'print $3'}` if [ "$jobid" == "" ]; then echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to restart network with id $1; unable to submit the job" >>$LOGFILE echo 2 @@ -367,7 +371,7 @@ restart_network(){ restart_vpc(){ echo -e "INFO: Restarting vpc with id $1" echo "[$(date "+%Y.%m.%d-%H.%M.%S")] INFO: Restarting vpc with id $1" >>$LOGFILE - jobid=`curl -sS "http://$ms:8096/?command=restartVPC&id=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F: {'print $3'}` + jobid=`curl -sS "http://$ms:$integrationport/?command=restartVPC&id=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F: {'print $3'}` if [ "$jobid" == "" ]; then echo "[$(date "+%Y.%m.%d-%H.%M.%S")] ERROR: Failed to restart vpc with id $1; unable to submit the job" >>$LOGFILE echo 2 @@ -387,7 +391,7 @@ restart_vpc(){ restart_vpcs(){ - vpcs=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select id from vpc WHERE removed is null$zone"`) + vpcs=(`mysql -h $db --user=$user --password=$password --skip-column-names -U cloud -e "select uuid from vpc WHERE removed is null$zone"`) length_vpcs=(${#vpcs[@]}) echo -e "\nRestarting $length_vpcs vpcs... " @@ -450,21 +454,21 @@ restart_vpcs(){ } 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 $4'} | awk -F: {'print $2'}` - if [ "$jobstatus" != "0" ]; then - echo $jobstatus - break - fi -sleep 5 -done + while [ 1 ] + do + jobstatus=`curl -sS "http://$ms:$integrationport/?command=queryAsyncJobResult&jobId=$1&response=json" | sed 's/\"//g' | sed 's/ //g' | sed 's/{//g' | sed 's/}//g' | awk -F, {'print $7'} | awk -F: {'print $2'}` + if [ "$jobstatus" != "0" ]; then + echo $jobstatus + break + fi + sleep 5 + done } if [ "$system$router$all$help$redundant$vpc" == "" ] then - usage - exit + usage + exit fi if [ "$help" == "1" ]