vSphere APIを活用する
vSphere PowerCLI
vSphere PowerCLIは、PowerShellを使ってvSphere環境の管理を自動化するツールである。図1のWebサイトにて”vSphere PowerCLI”というリンクをクリックするか、こちら(英語サイト)にアクセスするとダウンロードできる(図7)。 vSphere PowerCLIは無償ツールだが、ダウンロードにはユーザー登録が必要である。
図7: vSphere PowerCLIのダウンロード画面 |
vSphere PowerCLIバージョン4.0Update1は、Windows 2003 Server SP2、Vista、XP SP2上での動作をサポートしている。また、あらかじめPowerShell 1.0をインストールする必要がある。
ダウンロードしたvSphere PowerCLIをインストールすると、デスクトップおよび”すべてのプログラム”に、VMware vSphere PowerCLIというショートカットが作成される。インストール時もしくは起動時に図8や図9の警告が表示された場合、起動したシェルで下記を実行し、画面を開き直す必要がある(※Vistaでは「管理者として実行」でvSphere PowerCLIを起動してから実行)。
図8: インストール時の警告 |
図9: 起動時の警告(クリックで拡大) |
正常に起動すると図10のような画面が表示される。
図10: vSphere PowerSLI画面(クリックで拡大) |
まずは、画面に表示されているヘルプにしたがって、下記のようにコマンドを実行してみる。vSphere PowerCLIを実行しているWindowsアカウントを使ってvCenter Serverにログインする場合、UserとPasswordは省略できる。
しばらくすると、仮想マシン名やパワー状態、CPU数とメモリー量の一覧が表示されるはずだ。Connect-VIserverコマンドレットはvCenterへのログインを行い、Get-VMコマンドレットはログインしているvCenterからVirtualMachineオブジェクトを取得するコマンドレットである。出力結果の1行1行が個々のVirtualMachineオブジェクトにあたる。単に出力しただけでは文字列と変わらないように見えるが、下記のように実行すると、結果がオブジェクトの配列になっていることが分かるだろう。
※仮想マシンが1台の場合はエラーになるため、($VMs)[0].Nameもしくは単に$VMs.Nameを実行
Get-VMコマンドレットには引数として仮想マシン名を指定するほか、-Locationオプションで特定のESXやリソース・プール、データ・ストアを指定することもできる。こういったコマンドレットの詳細はhelp Get-VMを実行することで確認できる。
また、vSphere PowerCLIは200を超えるコマンドレットを提供しており、Get-VICommandコマンドレットで一覧を表示することができる。加えて、vSphere PowerCLIのリファレンスも提供されており、Get-VICommandとhelpを併用して確認できる内容をWebでも参照できる(VMware vSphere PowerCLI Cmdlets Reference(英語サイト))。
例えば、ゲストOSを再起動したいと思った場合、上記の方法でRestart-VMGuestコマンドレットが使えることが分かる。これに、Get-VMコマンドレットの-Locationオプションを利用すると、指定されたESX上の全仮想マシンを再起動する処理が、下記のように記述できる。前の実行結果のオブジェクトをパイプで渡せるのは、PowerShellの特徴である。
パワー・オン状態の仮想マシンのみを対象としたい場合には下記のように条件をはさむこともできる。
冒頭のvSphere APIの説明では、VirtualMachineオブジェクトにはRebootGuestというメソッドがあると説明したが、vSphere PowerCLIのRestart-VMGuestコマンドレットとは名称が大きく異なっている。少々分かりづらいのだが、vSphere PowerCLIは、典型的な処理については独自のコマンドレットを提供しており、vSphere APIのオブジェクト・モデルを理解しなくても済むようになっている。
先ほど、Get-VMはVirtualMachineオブジェクトを取得している、と説明したが、正確には、vSphere APIでVirtualMachineオブジェクトを取得し、vSphere PowerCLI独自のVirtualMachineImplオブジェクトに変換して結果を返していることになる。
このように、抽象化されたvSphere PowerCLIの中では、そのままではvSphere APIのすべてのプロパティやメソッドを使用できるわけではない。スクリプトを素早く簡単に作成する場合には便利だが、vSphere PowerCLIのオブジェクトではプロパティやメソッドの数がかなり少ないため、実現できない処理も少なくない。vSphere PowerCLIにおいて削除された処理をPowerShellで行いたい場合、vSphere APIネイティブのオブジェクトに再変換するGet-Viewコマンドレットを使用する。
Get-Viewの効果は、PowerShellでオブジェクトに定義されたプロパティとメソッドの一覧を表示するGet-Memberコマンドレットを使うと分かりやすい。
下記の1行目の実行結果(VirtualMachineImplオブジェクト)に比べ、2行目(VirtualMachineオブジェクト)の実行結果は量が多く、Managed Object Referenceで確認できるプロパティやメソッドとも一致していることが分かる。
同じ処理が可能であれば、Get-Viewを使用しない方が簡潔に記述できる。だが、実現できる処理の幅を広げるためには、Get-Viewの使いどころを理解することが重要である。