导语:经常需要使用vmware exsi6上的虚拟机进行快照恢复纯净镜像进行测试,要关机恢复快照开机太麻烦了。
需要开启对应的远程权限,即可以ssh到vmware exsi的终端。
上脚本 最后通知的功能未完善。
#!/bin/sh
blue() {
echo -e "\033[34m $(date +%Y%m%d_%H%M%S)>>>>>> $1 \033[0m"
}
green() {
echo -e "\033[32m $(date +%Y%m%d_%H%M%S)>>>>>> $1 \033[0m"
}
red() {
echo -e "\033[31m $(date +%Y%m%d_%H%M%S)>>>>>> $1 \033[0m"
}
yellow() {
echo -e "\033[33m $(date +%Y%m%d_%H%M%S)>>>>>> $1 \033[0m"
}
yellow ">>>>>input snap rollback machine IP (192.168.10.83)......"
read IP
# exsi open secur shell
vm_name=$IP
vm_id=`vim-cmd vmsvc/getallvms |grep ${vm_name} |awk '{print $1}'`
get_vm_id(){
vim-cmd vmsvc/getallvms |grep ${vm_name} |awk '{print $1" "$2}' |awk -F, 'NR==1 {print "IP "," DEVICETYPE" } {gsub(/"/,""); print $1,$2}'
}
get_snapshot(){
vim-cmd vmsvc/snapshot.get ${vm_id}
}
ping_func(){
# ps | grep vmx |grep 192.168.10.81 # can kill process
while true
do
ping -c1 -W1 ${vm_name}
if [ $? -eq 0 ];then
yellow "ping success ,machine is alive"
red "going to shutdown ${vm_name} "
vim-cmd vmsvc/power.off ${vm_id} &>/dev/null
sleep 30
else
break
fi
done
while true
do
process_num=`ps | grep vmx |grep ${vm_name}|wc -l `
yellow process_num ${process_num}
if [ ${process_num} -ne 0 ];then
yellow "machine is alive ,it has : ${process_num} proces"
sleep 30
else
break
fi
done
green "machine is down ,let's go"
}
roll_snapshot(){
yellow ">>>>>input $vm_name snapshot id......"
read snapshot_id
echo ' '
if [ ! -n "${snapshot_id}" ]; then
red "id is null,please input $vm_name snapshot id......"
roll_snapshot
fi
vim-cmd vmsvc/snapshot.revert ${vm_id} ${snapshot_id} suppressPowerOn
if [ $? -ne 0 ];then
red "id is not exsist"
get_snapshot
roll_snapshot
fi
}
poweron(){
sleep 30
vim-cmd vmsvc/power.on ${vm_id}
while true
do
ping -c1 -W1 ${vm_name}
if [ $? -ne 0 ];then
yellow "ping faile , machine is turning on"
vim-cmd vmsvc/power.on ${vm_id}
sleep 30
else
break
fi
done
}
email(){
# 测试22端口通了之后发送email通知。
echo "email "
}
get_vm_id
ping_func
get_snapshot
roll_snapshot
poweron
email
使用效果如下。