harry’s memorandum

おれおれメモ

VMware VIX を使って仮想マシンを色々操作してみる 1

VMwareには開発者向けにSDKを公開しています。
どれも便利で使いやすいのですが、その中でもっとも便利なものの1つに VMware VIX があります。


VIXは仮想マシンの自動化処理にもっとも効果を発揮します。

The VIX API allows development of scripts and programs that automate virtual machine operations. This API is high-level, easy to use, and practical for script writers and application programmers. The download package includes:


バージョンの1.6.2までは 実験的に ESX/ESXi をサポートしていましたが、最近リリースした バージョン1.7で完全にサポートとなったようです。

Support for ESX/ESXi hosts and VMware Infrastructure.
You can use VIX 1.6.2 libraries to control virtual machines and guests on ESX/ESXi hosts.
Caution: ESX/ESXi support is experimental in this release. Interfaces might change in subsequent releases, and backward compatibility is not guaranteed.


まずは、VIXをインストールします。ここではCentOS5.2(i386)を使用します。ダウンロードしたアーカイブはヘッダにシェルが書いてあるインストーラですので、そのまま実行します。インストールはこれで完了です。(公式サイトのインストール手順はここ)

$ file VMware-VIX-1.7.0-186713.i386.bundle
VMware-VIX-1.7.0-186713.i386.bundle: a bash script text executable
$ sudo sh ./VMware-VIX-1.7.0-186713.i386.bundle
~~
Do you agree? [yes/no]: yes

The product is ready to be installed.  Press Enter to begin
installation or Ctrl-C to cancel.

Installing VMware VIX API 1.7.0
    Configuring...
[######################################################################] 100%
Installation was successful


CやPerlのVIX APIを使うには別途コンパイルしないといけないのですが、一緒にインストールされるvmrunという便利なコマンドが使えますので、まずはこれを紹介します。

$ vmrun -T 
Usage: vmrun [AUTHENTICATION-FLAGS] COMMAND [PARAMETERS]

AUTHENTICATION-FLAGS
--------------------
These must appear before the command and any command parameters.

   -h <hostName>  (not needed for Workstation)
   -P <hostPort>  (not needed for Workstation)
   -T <hostType> (ws|server|server1|fusion|esx|vc)
     for example, use '-T server' for VMware Server 2.0
                  use '-T server1' for VMware Server 1.0
                  use '-T ws' for VMware Workstation
                  use '-T esx' for VMware ESX
                  use '-T vc' for VMware vCenter Server
   -u <userName in host OS>  (not needed for Workstation)
   -p <password in host OS>  (not needed for Workstation)
   -gu <userName in guest OS>
   -gp <password in guest OS>


引数なしで実行するとわかりやすいUsageが表示されます。
手始めにESXサーバに登録されているVMwareゲストOSの一覧をだしてみます。(esxサーバとesxのユーザ/パスワードは環境に合わせてください)

$ vmrun -T esx -h http://myesxserver/sdk -u user -p password listRegisteredVM 
Total registered VMs: 2
[data1] WindowsXP/WindowsXP.vmx
[data1] CentOS5.3/CentOS5.3.vmx


今度は起動しているVMwareゲストOSの一覧をだしてみます。

$ vmrun -T esx -h http://myesxserver/sdk -u user -p password list
Total running VMs: 1
[data1] CentOS5.3/CentOS5.3.vmx


"[data1] WindowsXP/WindowsXP.vmx" というvmは起動していないので、vmrunコマンドで起動させます。

$ vmrun -T esx -h http://myesxserver/sdk -u user -p password start "[data1] WindowsXP/WindowsXP.vmx"
$ echo $?
0


ファイル名をみるとWindowsXPのようですが("[data1] WindowsXP/WindowsXP.vmx") 本当にWindowsかどうかわかりません。VMwareゲストOSの中のプロセスを調べてみます。

$ vmrun -T esx -h http://myesxserver/sdk -u user -p password -gu Administrator -gp guestpassword listProcessesInGuest "[data1] WindowsXP/WindowsXP.vmx"
Process list: 18
pid=0, owner=, cmd=[System Process]
pid=4, owner=, cmd=System
pid=544, owner=NT AUTHORITY\SYSTEM, cmd=\SystemRoot\System32\smss.exe
pid=592, owner=, cmd=csrss.exe
pid=616, owner=NT AUTHORITY\SYSTEM, cmd=winlogon.exe
pid=660, owner=NT AUTHORITY\SYSTEM, cmd=C:\WINDOWS\system32\services.exe
pid=672, owner=NT AUTHORITY\SYSTEM, cmd=C:\WINDOWS\system32\lsass.exe
pid=832, owner=NT AUTHORITY\SYSTEM, cmd="C:\Program Files\VMware\VMware Tools\vmacthlp.exe"
pid=860, owner=NT AUTHORITY\SYSTEM, cmd=C:\WINDOWS\system32\svchost -k DcomLaunch
pid=952, owner=, cmd=svchost.exe
pid=1048, owner=NT AUTHORITY\SYSTEM, cmd=C:\WINDOWS\System32\svchost.exe -k netsvcs
pid=1156, owner=, cmd=svchost.exe
pid=1316, owner=, cmd=svchost.exe
pid=1416, owner=NT AUTHORITY\SYSTEM, cmd=C:\WINDOWS\system32\spoolsv.exe
pid=1540, owner=, cmd=svchost.exe
pid=1676, owner=NT AUTHORITY\SYSTEM, cmd="C:\Program Files\VMware\VMware Tools\VMwareService.exe"
pid=2004, owner=, cmd=alg.exe
pid=360, owner=NT AUTHORITY\SYSTEM, cmd="C:\WINDOWS\system32\wuauclt.exe" /RunStoreAsComServer Local\[418]SUSDSbd0cf9d8451a1e418635276a66a02e58


スナップショットもリモートからコマンド一発でできます。

$ vmrun -T esx -h http://myesxserver/sdk -u user -p password snapshot "[data1] WindowsXP/WindowsXP.vmx" 20090912-mysnapshot
$ echo $?
0


もちろんスナップショットの削除もコマンド一発でできます。

$ vmrun -T esx -h http://myesxserver/sdk -u user -p password deleteSnapshot "[data1] WindowsXP/WindowsXP.vmx" 20090912-mysnapshot
$ echo $?
0


VIXはゲストOSの起動/停止/スナップショットの操作だけではありません。
ゲストにVMwareTooslをインストールしていればネットワークを介すことなく、ESXから直接ゲストOSの中に対して操作もできます。また仮想マシンと物理ハードウェアとの間のやりとりをデバッグできるvProbe機能も使うことができます。

詳しい情報はVMwareサイトのPDFをご参照。すごく便利なのでぜひ使ってみてください。