Λάδι Βιώσας

http://profile.hatena.ne.jp/kenkitii/

ESXi をリモートからいじるメモ

ESXi 上のゲストOSをいじるのに、いちいち重たいGUIを開くのは面倒てことで、ssh 経由でリモートから色々やろうと思って色々調べてたのだけど、ESXi の CLI にゲストOSの電源オン・オフの状態一覧を表示するコマンドがないっぽかったので、rubyスクリプトを書いてみた↓

# -*- coding: utf-8 -*-
require 'rubygems'
require 'net/ssh'

HOST = '192.168.0.2'
USER = 'root'
PASSWORD = 'hogehoge'

def get_state_allvms
  Net::SSH.start(HOST, USER, :password => PASSWORD) do |ssh|
    output = ssh.exec!("vim-cmd vmsvc/getallvms")
    puts "Power #{output.first}"
    output.drop(1).each do |line|
      id = line.split.first
      state = ssh.exec!("vim-cmd vmsvc/power.getstate #{id}")
      puts (state =~ /Powered on/) ? "on    #{line}" : "off   #{line}"
    end
  end
end

get_state_allvms

実行するとこんな感じに↓

Power Vmid        Name                          File                        Guest OS      Version   Annotation
on    16     Windows XP SP3   [x3105] Windows XP SP3/Windows XP SP3.vmx   winXPProGuest   vmx-07              
on    32     ubuntu           [x3105] ubuntu/ubuntu.vmx                   ubuntu64Guest   vmx-07              
off   48     sc430            [data] sc430/sc430.vmx                      winXPProGuest   vmx-07              

で、、、ゲストOS全部シャットダウンしてから、ESXi マシンの電源切るにはどうしたらよかろう?と調べていたら、そもそも shutdown.sh というスクリプトが /sbin にあって

~ # shutdown.sh
~ # poweroff

で済んだ。自動起動設定してるゲストOSだけ起動する場合は、vmware-autostart.sh を使えば良いっぽい。