1.仮想マシンとESXiの停止
ESXiにログインし、すべて仮想マシンを停止するのも面倒なため、スクリプトを組みました。また、普通ならpowershellで行うところを、ESXiに組込み、外部のLinuxサーバからsshでアクセスし、スクリプトを蹴っても実行できるようにしています。
2.自動停止スクリプト
仮想ホストはESXi6.7です。
vmware-stop.sh
#停止除外マシンのVMIDを取得EXCLUDE=$(vim-cmd vmsvc/getallvms |grep <停止除外仮想マシン名> | awk'{print $1}')#ESXi上に搭載している仮想マシンのVMIDを取得for i in$(vim-cmd vmsvc/getallvms | awk'{print $1}'|sed '1d')do#除外仮想マシンの場合は処理をスキップif[$EXCLUDE-eq$i];then
continue
else#取得した仮想マシンのVMIDを参照し、シャットダウン実行if[$(vim-cmd vmsvc/power.getstate $i | awk'NR>1'|awk '{print $2}')='on'];then
vim-cmd vmsvc/power.shutdown $i#シャットダウンが失敗した場合処理をスキップif[$?-ne 0 ];then
continue
else
while true
do#取得したVMIDを参照し、起動状態を確認if[$(vim-cmd vmsvc/power.getstate $i | awk'NR>1'|awk '{print $2}')='on'];then#10秒確認を停止sleep 10
continue
else
break
fi
done
fi
else
echo"OFF"fi
fi
done#ESXiのメンテナンスモードへの移行実行
vim-cmd hostsvc/maintenance_mode_enter
while true
do#10秒ごとにメンテナンスモードへの移行確認実施if[$(vim-cmd /hostsvc/hostsummary | grep inMaintenanceMode|awk '{print $3}')='true,'];then
break
else
sleep 10
continue
fi
poweroff
3.課題
スクリプトの除外処理でサーバを1台のみしか指定できないので、
改良が必要。また、仮想マシンにvmware toolsが入っていないと停止できないため、古すぎるOSやvmware toolsをインストールできない仮想アプライアンスなどは対応できないです。