VMware Cloud Director 10.4(VCD)で、PowerCLI を使用して vApp 仮想マシンのストレージ ポリシーを変更してみます。PowerCLI の VCD 関連モジュールにはストレージ ポリシーを操作するためのコマンドレットが見当たらなかったので、オブジェクトのもつメソッドを利用して設定変更してみます。
前回の内容とは直接関係しませんが、これまでの vApp と仮想マシンを設定対象として利用します。
今回の内容です。
今回の環境
VCD のテナント ポータルで確認すると、VDC「org-vdc-01」には、2つの仮想マシン ポリシー(sp-local-vmfs と sp-local-vmfs-2)が用意されています。
この VDC に作成されている vApp「vapp-02」には、仮想マシン「vm01」が作成されており、ストレージ ポリシー「sp-local-vmfs」が割り当てられています。
1. ストレージ ポリシーの取得
設定変更で指定するため、まずは組織 VDC に登録されているストレージ プロファイルを取得します。
組織 VDC(org-vdc-01)に含まれている VDC です。テナント ポータルで確認したとおり、2つのストレージ ポリシーがあります。
PS C:\> Get-OrgVdc -Name org-vdc-01 | %{$_.ExtensionData.VdcStorageProfiles.VdcStorageProfile} Client : VMware.VimAutomation.Cloud.Views.CloudClient Href : https://lab-vcd-31.vcd.go-lab.jp/api/vdcStorageProfile/1fb2df18-cb35-4190-955f-6475ade9afbd Id : urn:vcloud:vdcstorageProfile:1fb2df18-cb35-4190-955f-6475ade9afbd Type : application/vnd.vmware.vcloud.vdcStorageProfile+xml Name : sp-local-vmfs AnyAttr : VCloudExtension : Client : VMware.VimAutomation.Cloud.Views.CloudClient Href : https://lab-vcd-31.vcd.go-lab.jp/api/vdcStorageProfile/29018504-bf94-4d54-9f7f-7aacbab6d3d4 Id : urn:vcloud:vdcstorageProfile:29018504-bf94-4d54-9f7f-7aacbab6d3d4 Type : application/vnd.vmware.vcloud.vdcStorageProfile+xml Name : sp-local-vmfs-2 AnyAttr : VCloudExtension :
このうち、sp-local-vmfs-2 のみを取得して変数に格納しておきます。
PS C:\> $vdc_storage_profiles = Get-OrgVdc -Name org-vdc-01 | %{$_.ExtensionData.VdcStorageProfiles.VdcStorageProfile} PS C:\> $vdc_storage_profile = $vdc_storage_profiles | where {$_.Name -eq "sp-local-vmfs-2"} PS C:\> $vdc_storage_profile Client : VMware.VimAutomation.Cloud.Views.CloudClient Href : https://lab-vcd-31.vcd.go-lab.jp/api/vdcStorageProfile/29018504-bf94-4d54-9f7f-7aacbab6d3d4 Id : urn:vcloud:vdcstorageProfile:29018504-bf94-4d54-9f7f-7aacbab6d3d4 Type : application/vnd.vmware.vcloud.vdcStorageProfile+xml Name : sp-local-vmfs-2 AnyAttr : VCloudExtension :
2. vApp 仮想マシンへのストレージ ポリシー変更
vapp-02 には、複数の仮想マシンが含まれます。
PS C:\> Get-CIVApp -OrgVdc org-vdc-01 -Name vapp-02 | Get-CIVM Name Status GuestOSFullName CpuCount MemoryGB ---- ------ --------------- -------- -------- jbox01 PoweredOff VMware Photon OS (64-bit) 1 2.000 vm01 PoweredOff VMware Photon OS (64-bit) 1 2.000 vm02 PoweredOff VMware Photon OS (64-bit) 1 2.000
このうち、vm01 を今回の設定変更対象とします。
PS C:\> $vm = Get-CIVApp -OrgVdc org-vdc-01 -Name vapp-02 | Get-CIVM -Name vm01 PS C:\> $vm Name Status GuestOSFullName CpuCount MemoryGB ---- ------ --------------- -------- -------- vm01 PoweredOff VMware Photon OS (64-bit) 1 2.000
vm01 には、ストレージ ポリシー「sp-local-vmfs」が割り当てられています。
PS C:\> $vm.ExtensionData.StorageProfile Client : VMware.VimAutomation.Cloud.Views.CloudClient Href : https://lab-vcd-31.vcd.go-lab.jp/api/vdcStorageProfile/1fb2df18-cb35-4190-955f-6475ade9afbd Id : urn:vcloud:vdcstorageProfile:1fb2df18-cb35-4190-955f-6475ade9afbd Type : application/vnd.vmware.vcloud.vdcStorageProfile+xml Name : sp-local-vmfs AnyAttr : VCloudExtension :
ストレージポリシーを、sp-local-vmfs-2 に変更します。sp-local-vmfs-2 のオブジェクトを格納しておいた $vdc_storage_profile を設定したうえで、UpdateServerData メソッドで反映させます。
PS C:\> $vm.ExtensionData.StorageProfile = $vdc_storage_profile PS C:\> $vm.ExtensionData.UpdateServerData()
これで、vm01 をあらためて取得しなおすと、ストレージ ポリシーが「sp-local-vmfs-2」に変更されていることが確認できます。
PS C:\> $vm = Get-CIVApp -OrgVdc org-vdc-01 -Name vapp-02 | Get-CIVM -Name vm01 PS C:\> $vm.ExtensionData.StorageProfile Client : VMware.VimAutomation.Cloud.Views.CloudClient Href : https://lab-vcd-31.vcd.go-lab.jp/api/vdcStorageProfile/29018504-bf94-4d54-9f7f-7aacbab6d3d4 Id : urn:vcloud:vdcstorageProfile:29018504-bf94-4d54-9f7f-7aacbab6d3d4 Type : application/vnd.vmware.vcloud.vdcStorageProfile+xml Name : sp-local-vmfs-2 AnyAttr : VCloudExtension :
テナント ポータルでも、少し待ってから Web ブラウザを更新すると vm01 のストレージ ポリシーとして変更後のものが表示されます。
3. vApp 単位でのストレージ ポリシー変更の例
vApp に含まれるすべての仮想マシンをまとめて変更する場合は、たとえば下記のようにコマンドを実行します。
$vdc_name = "org-vdc-01" $vapp_name = "vapp-02" $storage_profile_name = "sp-local-vmfs-2" $vdc_storage_profiles = Get-OrgVdc -Name $vdc_name | %{$_.ExtensionData.VdcStorageProfiles.VdcStorageProfile} $vdc_storage_profile = $vdc_storage_profiles | where {$_.Name -eq $storage_profile_name} $vapp = Get-CIVApp -OrgVdc $vdc_name -Name $vapp_name $vapp | Get-CIVM | Sort-Object Name | %{ $vm = $_ $vm.ExtensionData.StorageProfile = $vdc_storage_profile $vm.ExtensionData.UpdateServerData() }
実際に PowerShell のコンソールで実行すると下記のようになります。
PS C:\> $vdc_name = "org-vdc-01" PS C:\> $vapp_name = "vapp-02" PS C:\> $storage_profile_name = "sp-local-vmfs-2" PS C:\> PS C:\> $vdc_storage_profiles = Get-OrgVdc -Name $vdc_name | %{$_.ExtensionData.VdcStorageProfiles.VdcStorageProfile} PS C:\> $vdc_storage_profile = $vdc_storage_profiles | where {$_.Name -eq $storage_profile_name} PS C:\> PS C:\> $vapp = Get-CIVApp -OrgVdc $vdc_name -Name $vapp_name PS C:\> $vapp | Get-CIVM | Sort-Object Name | %{ >> $vm = $_ >> $vm.ExtensionData.StorageProfile = $vdc_storage_profile >> $vm.ExtensionData.UpdateServerData() >> } PS C:\> PS C:\> Get-CIVApp -OrgVdc org-vdc-01 -Name vapp-02 | Get-CIVM | select Name,{$_.ExtensionData.StorageProfile.Name} Name $_.ExtensionData.StorageProfile.Name ---- ------------------------------------ jbox01 sp-local-vmfs-2 vm01 sp-local-vmfs-2 vm02 sp-local-vmfs-2
まだつづく。