Snapshot All VM

모든 VM에 대하여 snapshot을 생성합니다.  
 
 전체 VM 리스트를 출력
 
 이름만 분리하고 오름차순으로 정렬한다.  
 "를 제거하고 VM명과 상태를 출력한다.  
 
 
 VM 전체를 Pause 한다
 
 전체 vm 리스트에 대한 pause를 실행  
 vm명에 "ex"가 있는 경우 skip하고자 하였으나 운영 상 스냅샷을 하는 것이 좋을 것 같아 나중에 수정함  
 단 vm명에 "ex"가 있는 경우

 
 실행 상태 확인
 
 실행상태
 
 이미 pause 상태를 확인하고 pause인 경우 skip , pause가 아닌 경우 pause pause 실행 
 
 
 
 
 실행 상태가 아닌 경우

 
 skip 
 
 
 
 
 vm명에 "ex"가 없는 경우

 
 실행 상태 확인
 
 실행상태
 
 이미 pause 상태를 확인하고 pause인 경우 skip , pause가 아닌 경우 pause Pause 실행 
 
 
 
 
 실행 상태가 아닌 경우

 
 skip 
 
 
 
 
 
 
 스냅샷을 생성한다
 
 스냅샷도 Pause와 공일한데 단 "ex"는 시행하지 않는다.  
 
 
 오래된 스냅샷을 삭제한다.   Delete 

 
 "ex", "Test"인경우 skip 
 pause된 vm에 한정하여 삭제한다.  : 전체 스냅샷 중에서 FinalSnapshotDueDay이전의 스냅샷을 지우되 FinalSnapshotCnt 이하로 지우지는 않는다.  
 
 
 Pause를 풀고 Resuming한다.

 
 "ex"인 경우 : pause인 경우 재개한다. pause가 아닌 경우 실행하고 있는 걍우는 skip 그렇지 않은 경우 재개  
 "Test"인 경우 : 모두 skip 
 그 외에는 running 경우를 제외하고 모두 재개한다.  
 
 
 
 #!/bin/bash

echo -e "\n"
echo "##############################################"
echo "############# MAKE SNAPSHOT START ! ##########" 
echo "##############################################"
export _SDATE=$(date +"%Y-%m-%d %H")
echo "START "$_SDATE

echo -e "\n## Virtural Images list ##" 
allVm=$(/usr/bin/VBoxManage list vms | awk '{print($1)}' | sort)
runningVm=$(/usr/bin/VBoxManage list runningvms | awk '{print($1)}' | sort -nr)

# Check Status
VmStatus(){
 vmStatus=$(/usr/bin/VBoxManage showvminfo $1 | grep -e ^State | sed s/\ \ //g )
 echo ${vmStatus}
}

# All VM Print
PrintVmList(){
 for i in $allVm
 do
 vmname=$(echo $i | sed -e "s/\"//g")
 echo " > " $vmname " , Status=" $(VmStatus $vmname)
 done
}

# Check Running
IfRunning(){
 runnable=1
 vmStatus=$(/usr/bin/VBoxManage showvminfo $1 | grep -e ^Name: -e ^State | sed s/\ \ //g | grep running | awk '{print($2)}')
 if [ -z $vmStatus ] ; then
 runnable=1
 elif [ $vmStatus = "running" ] ; then
 runnable=0
 else
 runnable=1
 fi
 echo ${runnable}
}

# Check Pause
IfPause(){
 pausevm=1
 vmStatus=$(/usr/bin/VBoxManage showvminfo $1 | grep -e ^Name: -e ^State | sed s/\ \ //g | grep paused | awk '{print($2)}')
 if [ -z $vmStatus ] ; then
 pausevm=1
 elif [ $vmStatus = "paused" ] ; then
 pausevm=0
 else
 pausevm=1
 fi
 echo ${pausevm}
}

# All VM PAUSE 
PauseVM(){
	echo -e "\n## All Running Virtural Images Pause ##" 
	for i in $allVm
	do
 		vmname=$(echo $i | sed -e "s/\"//g")
 ex=$(echo $vmname | awk -F'-' '{print $1}')
 		if [ "$ex" = "ex" ] ; then
 if [ $(IfRunning $vmname) = 0 ] ; then
 if [ $(IfPause $vmname) = 0 ] ; then
 echo " > " $vmname " is running but Already paused, Ex Skip PAUSE START ! "
 else
 echo " > " $vmname " is running and not paused, Ex PAUSE START ! "
 ./002-snapshotVMPause.sh $vmname
 fi
 else
 echo " > " $vmname " is not running, Ex PAUSE Skip Pause !"
 fi
 else
 if [ $(IfRunning $vmname) = 0 ] ; then
 if [ $(IfPause $vmname) = 0 ] ; then
 echo " > " $vmname " Already paused, notEx Skip PAUSE START ! "
 else
 echo " > " $vmname " is running and not paused, notEx PAUSE START ! "
 ./002-snapshotVMPause.sh $vmname
 fi
 else
 echo " > " $vmname " is not running, notEx Skip Pause !"
 fi
 fi
	done
}

# VM Snapshot
Snapshot(){
	echo -e "\n## Virtural Images Snapshot ##"
 for i in $allVm
 do
 vmname=$(echo $i | sed -e "s/\"//g")
 ex=$(echo $vmname | awk -F'-' '{print $1}')
 if [ "$ex" = "ex" ] ; then
 if [ $(IfPause $vmname) = 0 ] ; then
 echo " > " $vmname " is pause, Ex Snapshot Skip ! "
 else
 echo " > " $vmname " is not pause, Ex Snapshot Skip !"
 fi
 else
 if [ $(IfPause $vmname) = 0 ] ; then
 if [ "$ex" = "Test" ] ; then
 echo " > " $vmname " is pause, notEx but it is Test VM so Snapshot Skip !"
 else
 echo " > " $vmname " is pause, notEx Snapshot START !"
 ./003-snapshotVM.sh $vmname
 fi
 else
 echo " > " $vmname " is not pause, notEx Snapshot Skip ! "
 fi
 fi 
 done
}

# VM Delete 
Delete(){
 echo "\n## Virtural Images Backup Snapshot Delete ##"
 for i in $allVm
 do
 vmname=$(echo $i | sed -e "s/\"//g")
 ex=$(echo $vmname | awk -F'-' '{print $1}')
 if [ "$ex" = "ex" ] ; then
 echo " > " $vmname " Skip Snapshot Delete !"
 else
 if [ "$ex" = "Test" ] ; then
 echo " > " $vmname " is disable VM so Skip Snapshot Delete !"
 else
 if [ $(IfPause $vmname) = 0 ] ; then
 echo " > " $vmname " is pause, Snapshot Delete START ! "
 ./004-snapshotiDeleteVM.sh $vmname
 else
 echo " > " $vmname " is not pause, notEx Skip Snapshot Delete !"
 fi
 fi
 fi
 done
}

# VM Resuming
Resuming(){
 echo "\n## Virtural Images Snapshot ##"
 for i in $allVm
 do
 vmname=$(echo $i | sed -e "s/\"//g")
 ex=$(echo $vmname | awk -F'-' '{print $1}')
 if [ "$ex" = "ex" ] ; then
 if [ $(IfPause $vmname) = 0 ] ; then
 echo " > " $vmname " is pause, Ex START ! "
 ./005-snapshotResuming.sh $vmname
 else
 echo " > " $vmname " is not pause, Ex Check Start VM !"
 if [ $(IfRunning $vmname) = 0 ] ; then
 echo " > " $vmname " is running, Ex Skip Start VM !"
 else
 echo " > " $vmname " is not running, Ex Start VM !"
 ./005-snapshotResuming.sh $vmname
 fi
 fi
 else
 if [ "$ex" = "Test" ] ; then
 echo " > " $vmname " is disable VM so Not Start VM !"
 else
 if [ $(IfPause $vmname) = 0 ] ; then
 echo " > " $vmname " is pause, notEx Start VM !"
 ./005-snapshotResuming.sh $vmname
 else
 echo " > " $vmname " is not pause, notEx Check Start VM !"
 if [ $(IfRunning $vmname) = 0 ] ; then
 echo " > " $vmname " is running, Ex Skip Start VM !"
 else
 echo " > " $vmname " is not running, Ex Start VM !"
 ./005-snapshotResuming.sh $vmname
 fi
 fi 
 sleep 5
 fi
 fi
 done
}

cd /home/hyunsu/BackUpCenter/20221014-snapshot/
PrintVmList
PauseVM
Snapshot
Delete
Resuming

echo -e "\n"
echo "##############################################"
echo "############# MAKE SNAPSHOT END ! ############"
echo "##############################################"
echo -e "\n"