ここでは、VMware HorizonのView APIを操作するためにHorizon PowerCLIモジュールをインストールして簡単に操作してみようと思います。
環境
項目 | バージョン |
---|---|
vCenter | 6.7.0 |
ESXi | 6.7.0 |
Horizon | 7.9.0 |
View API | 7.6.0 |
Windows Server | 2016 |
Horizon PowerCLIモジュールのインポート
Powershellを管理者権限で立ち上げて Vmware.PowerCLI
のインストールを実行します。
もし NuGet
がインストールされていない場合は、インストールする必要があるためインストールしてください。(以下を参照)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
PS C:\Users\Administrator> Install-Module -Name Vmware.PowerCLI 続行するには NuGet プロバイダーが必要です PowerShellGet で NuGet ベースのリポジトリを操作するには、'2.8.5.201' 以降のバージョンの NuGet プロバイダーが必要です。NuGet プロバイダーは 'C:\Program Files\PackageManagement\ProviderAssemblies' または 'C:\Users\Administrator\AppData\Local\PackageManagement\ProviderAssemblies' に配置する必要があります。'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force' を実行して NuGet プロバイダーをインストールすることもできます。今すぐ PowerShellGet で NuGet プロバイダーをインストールしてインポートしますか? [Y] はい(Y) [N] いいえ(N) [S] 中断(S) [?] ヘルプ (既定値は "Y"): 信頼されていないリポジトリ 信頼されていないリポジトリからモジュールをインストールしようとしています。このリポジトリを信頼する場合は、Set-PSRepository コマンドレットを実行して、リポジトリの InstallationPolicy の値を変更してください。'PSGallery' からモジュールをインストールしますか? [Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y |
VMware.VimAutomation.HorizonView
をインポートします。
1 2 |
PS C:\Users\Administrator> Import-Module -Name VMware.VimAutomation.HorizonView |
これで View API を操作できる準備が整いました 🙂
View APIの簡単な操作
まずは、イメージを掴むために簡単な例を描いてみます。
以下は、Connection Serverに登録してあるvCenterからVMの一覧を取得してVM名を表示するだけのものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# ログイン情報 $server = "192.168.0.181" $user = "Administrator" $password = "secret" $domain = "example.local" # CSへ接続 $hvServer = Connect-HVServer -Server $server -User $user -Password $password -Domain $domain -Force $services = $hvServer.ExtensionData # クエリ作成 $queryService = New-Object VMWare.Hv.QueryServiceService $query = New-Object VMware.Hv.QueryDefinition $query.queryEntityType = "MachineSummaryView" # クエリの作成・実行(サーバ側にクエリ情報が作成される・一定期間過ぎたら削除される) $r = $queryService.QueryService_Create($services, $query) # vCenter情報取得 $vc = $r.Results.summaryData.virtualCenter # vCenterのVM情報を取得 $vms = $services.VirtualMachine.VirtualMachine_List($vc) # VM名を一覧で表示 foreach($vm in $vms) { Write-Host $vm.Name } # サーバ側に作成されたクエリ情報の削除 $queryService.QueryService_Delete($services, $r.Id) |
上記のフローは
- Connection Serverにログイン
- 検索クエリを作成
- vCenterからVMの一覧取得
- VMの名前を表示
と言う風になっています。
なので、View APIを触る時は、まず操作または情報を取得するオブジェクトの取得をするためのクエリを書いた後に対象を抜き出しメソッドを実行する形になります。
オブジェクトやメソッドの仕様はAPIドキュメントに書いてあります。
上記ソース例の解説と同時にドキュメントの読み方について簡単に説明してみたいと思います。
View APIドキュメント
https://code.vmware.com/apis/445/view
クエリの実行
まずは、操作・情報を取得するためのオブジェクトを抽出するためのクエリを書く必要があります。
ドキュメントでは Query Service
に書いてあります。
ソース例だと、この部分です。
1 2 3 4 5 |
# クエリ作成 $queyService = New-Object VMWare.Hv.QueryServiceService $query = New-Object VMware.Hv.QueryDefinition $query.queryEntityType = "MachineSummaryView" |
$queryService
ではクエリを実行するための VMware.Hv.QueryService
オブジェクトを生成しています。
クエリ関連のメソッドを実行する場合は、このオブジェクトを生成します。
$query
では VMware.Hv.QueryDefinition
オブジェクトを生成しています。
このオブジェクトのプロパティには、検索対象や検索条件を設定することができます。
$query.queryEntityType
には検索対象を指定します。
指定できるのは Queryable Data Objects
です。
最後にサーバ側で生成された情報を削除しています。
1 2 3 |
# サーバ側に作成されたクエリ情報の削除 $queryService.QueryService_Delete($services, $r.Id) |
メソッドの実行
Connect-HVServer
コマンドレットで問題なくConnection Serverへログインできれば ViewObjectImpl
オブジェクトが生成されます。
その中の ExtensionsData
プロパティに Service
が入っています。
Service
にはView API経由で設定を追加・変更・削除・情報の取得をするメソッドが入っています。
ソース例だと、この部分です。
1 2 3 4 |
# CSへ接続 $hvServer = Connect-HVServer -Server $server -User $user -Password $password -Domain $domain -Force $services = $hvServer.ExtensionData |
使える Service
はドキュメントの Service Types
を確認してください。
ソース例だと、Connection Serverに登録してあるvCenterからVM一覧を取得しています。
1 2 3 4 5 6 |
# vCenter情報取得 $vc = $r.Results.summaryData.virtualCenter # vCenterのVM情報を取得 $vms = $services.VirtualMachine.VirtualMachine_List($vc) |
VM一覧を取得するために実行しているメソッドは VirtualMachine.VirtualMachine_List
です。
このメソッドの引数ではvCenterのIDオブジェクトを渡す必要があるので、その前にvCenterのIDを検索結果の summaryData
から取得しています。
取得したVM一覧はオブジェクトの配列なのでソース例ではforeachで回してNameプロパティを指定してVM名を表示しています。
1 2 3 4 5 |
# VM名を一覧で表示 foreach($vm in $vms) { Write-Host $vm.Name } |
簡単にですが、View APIの使い方について説明しました。
ここまで分かってしまえば、後はドキュメントのオブジェクト仕様を見ながら操作できると思います 🙂