VIX APIってご存知ですか? - vExpert Advent Calendar

vExpert Advent Calendar 12/5 エントリーです。

VMware仮想マシンを実行する製品には、共通してVIX APIというAPIが用意されています。公式のVMwareウェブサイトではこちら。
https://www.vmware.com/support/developer/vix-api/
このAPIは、vSphere ESXiはもちろん、WorkstationやPlayer、そしてFusionでも使用することができる共通のものとなっています。

…で、このAPIを使うと何ができるかといいますと、VMware Toolsがインストールされて動作しているゲストOSに対して、ネットワークを通すことなく様々な制御をすることができます。いわば公式なバックドア(^_^;)として使用することができる…とまで言うといいすぎですが、まぁ悪いこともできなくはないですね。

Workstation環境だと、こんな感じの仕組みとなります。

この機能はデフォルトが有効です。無効にしたい場合は、vmxファイルに以下の指定します。ESXiホストの場合は、/etc/vmware/config で指定することによってホスト全体で無効化することも可能です。

guest.commands.enabled = "FALSE"

この情報に関するVMwareのKBはこちら。
http://kb.vmware.com/kb/1010103

その他、VIX APIはセキュリティリスクになり得ますので、気になるという方は以下の情報を一読されることをオススメします。
https://www.vmware.com/support/developer/vix-api/vix115_reference/security.html

上記公式サイトにサンプルのコードもあります。以下のリファレンスページに、設定方法や使い方なども載っています。CやPerlC#などに対応しています。
https://www.vmware.com/support/developer/vix-api/vix115_reference/

vSphere 5 からは以下のようにVIX APIはvSphere APIの一部となっています。そのため、vCenterサーバを通じてゲストOSに対して処理を投げることができるようになっています。

そんなわけで、ためしにLinux環境からvCenterを通じてESXiホストで実行される仮想マシン上で動作するゲストOSに対してVIX APIを通じてコマンドを実行してみるサンプルプログラムを作ってみました。

[root@localhost tmp]# ./vixtestcommand http://(vCenter IP Address)/sdk (vCenter Account) (vCenter Password) "[(Datastore)](VM Folder)/(VM Name).vmx" (Guest OS Account) (Guest OS Password) (Script)
DEBUG: Success jobHandle  34603071
DEBUG: Success hostHandle 34603070
DEBUG: Before Opening VM
DEBUG: Opening VM....
DEBUG: Opened the VM
DEBUG: waiting for tools
DEBUG: tools up
DEBUG: logged in to guest
DEBUG: about to execute remote command
DEBUG: about to execute remote command (Script)
DEBUG: with args
Script execution status is 0
Script command exitCode is 0
DEBUG: execution completed....

おー、ちゃんとvCenterを通じて、仮想マシンが実行されているホストに接続し、仮想マシンに接続し、VMware Toolsを通じてゲストOSに接続し、コマンド実行されました。こんな感じで、ゲストOSがネットワークにつながっていなくても、vCenterサーバの管理者アカウントとパスワード、そしてゲストOSのアカウントとパスワードさえわかっていれば、ゲストOSに対する処理を実行できます。管理環境からネットワーク的な接続性のないゲストOS環境に対して処理を実行することができますので、上手く使えば仮想マシン展開後の管理に便利に使えそうです。

ただ、ゴメンナサイ、このサンプルプログラムには一部オープンになっていないコードを含む可能性がある拾い物を8割ぐらい使ってささっと作ってしまったため、コードの公開は残念ながらできません…。ただ、上記のサンプルコードとリファレンスの情報があれば、同じようなプログラムを作ることはそんなに大変ではないのではないかと思います。

Happy Cording!!

え、プログラミングとか面倒?そんな方にはCisco UCS Director(^_^;)。VIX API機能を簡単に使えるワークフローを書くことができる機能が標準で実装されています。すぐにVIX APIを活用できますよ!!

http://www.cisco.com/c/dam/en/us/td/docs/unified_computing/ucs/ucs-director/vix-script/VIXScriptUseCaseGuide.pdf

Enjoy Happy Life!!