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をご参照。すごく便利なのでぜひ使ってみてください。