ESXi サーバー機の自動電源オンオフ備忘録
ESXi サーバー機スペック
Server | HP ProLiant ML110 G7 |
CPU | Intel Xeon E3-1230 @3.20GHZ |
MEM | 16GB |
HDD | SATA 250GB |
CPUとメモリは換装済み、ESXi 5.1 でゲスト OS (Windows 7) を4つ立ちあげ、1OS毎に2CPU、メモリは4GB割り振ってます。
リモートからサーバー機の電源をオンにする
Integrated Lights-Out(iLO)と ipmiutil
HP iLo は追加のソフトウェアをインストールしなくても購入後すぐに使用でき、サーバーの電源が入ってなくても機能する HP 謹製のツールです。サーバーハードウェアをモニタ可能にするための標準インターフェイス仕様のIPMIに対応しています。そこで IPMI の Windows 用のツールである ipmiutil を使ってリモートからサーバー機の電源操作をしたいと思います。こんな感じのバッチファイルで↓
cd C:\bin\ipmiutil ipmiutil power -u -N IPAddress -U YourAdministratorName -P YourPassword
リモートからサーバー機の電源をオフにする
vim-cmd でやろうとしたけどなぜか shutdown できないゲストOSがひとつ。仕方ないので、WMIC 経由でゲストOSのシャットダウンをしてから vim-cmd で ESXi のパワーオフすることにする。以下、ruby スクリプトのように見えてバッチファイル。
WMIC /NODE:GUEST001 /USER:foo /PASSWORD:bar OS WHERE Primary=1 CALL Shutdown WMIC /NODE:GUEST002 /USER:foo /PASSWORD:bar OS WHERE Primary=1 CALL Shutdown WMIC /NODE:GUEST003 /USER:foo /PASSWORD:bar OS WHERE Primary=1 CALL Shutdown WMIC /NODE:GUEST004 /USER:foo /PASSWORD:bar OS WHERE Primary=1 CALL Shutdown @echo off c:\ruby193\bin\ruby -x %0 @goto EOF #!/usr/bin/ruby require 'rubygems' require 'net/ssh' HOST = 'youresxihost' USER = 'root' PASSWORD = 'youresxipassword' sleep(60*3) # 3分待機 Net::SSH.start(HOST, USER, :password => PASSWORD) do |ssh| output = ssh.exec!("vim-cmd vmsvc/getallvms") states = [] output.split("\n").drop(1).each do |line| vmid = line.split.first guest = line.split[1] state = ssh.exec!("vim-cmd vmsvc/power.getstate #{vmid}") puts (state =~ /Powered on/) ? "on #{guest}" : "off #{guest}" states << (state =~ /Powered off/) end # ゲストOSの Powered off の数をカウントし、全部 off なら ESXi をパワーオフ if states.size == states.count{|x| x} output = ssh.exec!("poweroff") puts output end end __END__ :EOF