vSphere APIを活用する
vSphere API
一部の細かい制約を無視すれば、vSphere Clientで実現可能な操作は、vSphere APIでも実現可能である。また、vSphere APIにアクセスする際はvSphere Clientでのログインと同じように認証が必要であり、実行された処理はvSphere Clientでの操作と同じようにvCenterのタスクとして認識される。このため、vCenterのタスクやイベントによる操作履歴の確認、権限割り当てといった従来の運用を阻害することはない。
vSphere APIは、オブジェクト指向のAPIである。vSphere環境に存在する仮想マシンやESX、クラスタなどは、Managed Objectと呼ばれるオブジェクトとしてインスタンス化されており、それぞれ固有のプロパティとメソッドを持っている。つまり、vSphere APIでは、Managed Objectを取得してプロパティへのアクセスやメソッドの呼び出しを行うことで、操作を実現することになる。
例えば、仮想マシンはVirtualMachineというタイプのManaged Objectであり、プロパティとしてnameやconfig、guestなどが、メソッドとしてPowerOnVM_Task、MigrateVM_Task、CloneVM_Task、RebootGuestなどが定義されている。このオブジェクトを取得すれば、configプロパティに含まれるリソース割り当ての設定を参照したり、RebootメソッドによってゲストOSを再起動したりといったことが可能になるわけだ。
このように、vSphere APIを利用するにはオブジェクト・モデルを理解することが重要である。このため、オブジェクト・モデルを簡単に確認できるようにする目的で、vCenter ServerにはManaged Object Referenceと呼ばれるWebアプリケーションが実装されている。
特別な構成の必要はなく、インストール済みのvCenter Serverがあれば、下記のURLでManaged Object Referenceへアクセスできる。
https://
Managed Object Referenceにアクセスすると最初に認証情報を要求されるので、vSphere Clientのログインと同じアカウントを入力する。ログインすると、トップ・ページ(図3)が表示される。
図3: Managed Object Referenceのトップ・ページ(クリックで拡大) |
詳細は割愛するが、まずは上記の表のNAMEとVALUEが下記の項目のリンクをたどってほしい。(xは数字)
- content(content)
- rootFolder(group-dx)
- childEntity(datacenter-x)
3のリンクをクリックして表示される画面(図4)の最上段を見ると、Managed Object IDがdatacenter-21のDatacenterオブジェクトの詳細が表示されていることが分かる。このデータセンターはvSphere Clientで確認できるデータセンターと同じものである。
図4: Managed Object ReferenceでのDatacenterオブジェクト |
最上段に続くPropertiesとMethodsという2つの表に、Datacenterオブジェクトに定義されているプロパティとメソッドが一覧化されている。例えば、nameプロパティでデータセンター名を確認したり、Rename_Taskメソッドでデータセンター名を変更したりといった操作が実現できる。
プロパティの値は、文字列もしくは別のオブジェクトへのリンクとなっている。例えば、DatacenterオブジェクトのhostFolderプロパティのリンクをたどると、ESXはHostSystemというタイプのManaged Objectであり、プロパティとしてnameやhoardware、vmなどが、メソッドとしてEnterMaintenanceMode_Task、RebootHost_Taskなどが定義されている。仮想マシン(VirtualMachineオブジェクト)やリソース・プール(ResourcePoolオブジェクト)なども、Managed Object Referenceの中で同じように詳細を確認することができる。
Managed Object Referenceは、vSphere APIのオブジェクト・モデルを実際の環境に基づいて確認できるため、全体を把握するという観点では非常に便利だ。しかしながら、個々のプロパティの値やメソッドの引数といった詳細を確認するためには、APIリファレンス「VMware vSphere API Reference(英語サイト)」を参照する必要がある。
例えば、VirtualMachineオブジェクトには、guestHeartbeatStatusというプロパティが存在する。Managed Object Referenceで確認するとgreenやgrayなどの値が確認できるが、これだけでは、guestHeartbeatStatusが取り得る値のリストやgreenやgrayが意味する状態を正確に理解することはできない。
図5: VMware vSphere APIリファレンスでのguestHeartbeatStatus |
APIリファレンスでは、まず左上のリストからAll Propertiesを選択し、検索フォームにguestHeartbeatStatusと入力する。インクリメンタル・サーチなので、入力の途中でも絞られた候補の中に調べたいプロパティが見つかれば、そのままクリックできる(図5)。
対象をクリックすると、右フレームにguestHeartbeatStatusを含む詳細ページが表示される。図5では、guestHeartbeatStatusがgray/red/yellow/greenの4つの値を取り得ることと、それぞれの値の示す状態を、理解することができる。
もう1点例をあげると、VritualMachineオブジェクトのguestプロパティ(GuestInfoデータ・オブジェクト)にはtoolsRunningStatusやtoolsStatusといった類似の名称のプロパティが存在する。この場合にも、図6のようにAPIリファレンスを確認することで、toolsStatusは古いバージョンのAPIとの互換性のために残されているものであって、vSphere4.0以降ではtoolsRunningStatusとtoolsVersionStatusの2つのプロパティを使うべきであることが分かる。
図6: VMware vSphere APIリファレンスでのtoolsStatus |
以上のように、Managed Object ReferenceとAPIリファレンスを併用し、オブジェクト・モデルを理解することができれば、vSphere APIの利用は難しくない。vSphere APIはSOAP(Simple Object Access Protocol)なので言語を選ばない。今回は、表1で紹介したSDKの中からvSphere PowerCLIを使い、PowerShellでvSphere APIを利用する方法を解説する。