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 <[email protected]>
AuthorDate: Wed Sep 18 17:14:43 2024 +0530
refactor: cloud-sysvmadm script (#9200)
Signed-off-by: Abhishek Kumar <[email protected]>
---
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" ]