VMware vSphere環境にて、一度、GUI操作でテンプレートのデプロイを行い、その結果をカスタマイズ仕様として保存している、という状態で、VMware Power CLIを使用して、GUIの「既存のカスタマイズ仕様を使用してカスタマイズする」相当の操作を行う場合、どのようにするかを説明する。
手順のポイント
・カスタマイズ仕様は「OSCustomizationSpec」と「OSCustomizationNicMapping」の2つから成り立っている
・既存のカスタマイズ仕様をコピーした一時的なカスタマイズ仕様を作成し、それを編集して使用する
・仮想マシンの電源を1度入れないとカスタマイズされない(カスタマイズ後、再起動される)
・使うcmdletは以下
カスタマイズ仕様関連
Get-OSCustomizationSpec, New-OSCustomizationSpec
Get-OSCustomizationNicMapping, Set-OSCustomizationNicMapping
テンプレートデプロイ関連
Get-VMHost
New-VM
仮想マシンのハードウェア構成変更
Get-VM, Set-VM
手順解説
その1 vCenterサーバに接続
vSphere PowerCLIによる操作を行う際、まずは「Connect-VIServer」により、操作対象のvCenterサーバに接続します。
下記はvCenter vApp(VCSA)の初期設定である「root」「vmware」で接続する場合の例です。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Connect-VIServer -Server IPアドレス -User root -Password vmware
Name Port User
---- ---- ----
IPアドレス 443 root
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
その2 既存カスタマイズ仕様をコピーしたカスタマイズ仕様を作成
既存のカスタマイズ仕様を一時的に変更してデプロイする、ということができないため、コピーしたカスタマイズ仕様を変更する、という手順を取る。
ただ、コピーの際に「-Type NonPersistent」というオプションを指定すると、このセッション中のみ使用できる一時的なカスタマイズ仕様として作成することができるため、デプロイ後の削除まで考える必要はない。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-OSCustomizationSpec cent6-dep | New-OSCustomizationSpec -Name cent6-temp -Type NonPersistent
Name Description Type OSType
---- ----------- ---- ------
cent6-temp NonPersistent Linux
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
その3 IPアドレスなど設定
IPアドレスやデフォルトゲートウェイなどネットワークに関する設定は「Get-OSCustomizationNicMapping」にて行う。
NICを増やす場合もここで行う。(ホスト名についてはここでは無い)
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-OSCustomizationNicMapping -Spec cent6-temp | Set-OSCustomizationNicMapping -IpMode UseStaticIP -IpAddress 172.17.44.55 -SubnetMask 255.255.0.0 -DefaultGateway 172.17.44.39
Position IPMode IPAddress DefaultGateway
-------- ------ --------- --------------
1 UseStaticIP 172.17.44.55 172.17.44.39
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
その4 仮想マシンホスト名の命名規則指定
仮想マシンにつけるホスト名をどのようなルールで行うかというのを指定する。
「-NamingScheme vm」は、仮想マシンの登録名とホスト名を同じとする、というものになる。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-OSCustomizationSpec cent6-temp | Set-OSCustomizationSpec -NamingScheme vm
Name Description Type OSType
---- ----------- ---- ------
cent6-temp NonPersistent Linux
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
その5 仮想マシンのデプロイ
今回は「nimblestorage」という名前のDataStoreを指定して、仮想マシンのデプロイを実施するという形で実行している。
先の項目で、仮想マシンの登録名とホスト名を同じとしているので「-Name cent6-ip55」で指定した「cent6-ip55」がホスト名となる。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> New-VM -Name cent6-ip55 -VMHost vmserver21.vmlab.local -Template cent6-deploy -OSCustomizationSpec cent6-temp -Datastore nimblestorage
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
cent6-ip55 PoweredOff 1 2.000
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
なお、デプロイ中に強制終了を行うと、それ以後、動作がおかしくなることがあるようだ。
今回遭遇した事例としては、下記の様なエラーがでるが、デプロイ自体は実施されていた。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> New-VM -Name cent6-ip55 -VMHost vmserver21.vmlab.local -Template cent6-deploy -OSCustomizationSpec cent6-temp -Datastore nimblestorage
New-VM : 2015/07/16 18:03:02 New-VM オブジェクトの現在の状態に問題が
あるため、操作は有効ではありません。
発生場所 行:1 文字:1
+ New-VM -Name cent6-ip55 -VMHost vmserver21.vmlab.local -Template cent6-depl
oy ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
+ CategoryInfo : NotSpecified: (:) [New-VM], VimException
+ FullyQualifiedErrorId : Core_BaseCmdlet_UnknownError,VMware.VimAutomatio
n.ViCore.Cmdlets.Commands.NewVM
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
その6 CPU/メモリの変更
作成した仮想マシンのCPUとメモリの割り当てを「Set-VM」で変更します。
なお、このSet-VMには「-Name」というオプションがありますが、仮想マシンを指定する際は「-VM 仮想マシン名」という風に指定します。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Set-VM -VM cent6-ip55 -NumCpu 2 -MemoryMB 4
Confirmation
Proceed to configure the following parameters of the virtual machine with name
'cent6-ip55'?
New MemoryMB: 4MB
New NumCpu: 2
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S)
[?] ヘルプ(既定値は "Y"): y
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
cent6-ip55 PoweredOff 2 0.004
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
上記の出力結果をよく見てみるとわかるのですが、実はメモリ容量はMB単位での指定となっています。このため、現状はなんと4MBしか割り当てられていません。これではMS-DOSぐらいしか起動できません。
「4G」と指定したいところですが、サポートされていないため、「4096」という形で指定します。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Set-VM -VM cent6-ip55 -NumCpu 2 -MemoryMB 4096
Confirmation
Proceed to configure the following parameters of the virtual machine with name
'cent6-ip55'?
New MemoryMB: 4096MB
New NumCpu: 2
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S)
[?] ヘルプ(既定値は "Y"): y
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
cent6-ip55 PoweredOff 2 4.000
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
その7 仮想マシンの電源ON
デプロイ時の初期設定は仮想マシンの初回起動時に行われるため、まずはPowerShellから電源オンを行うため「Start-VM」を実行します。
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Start-VM -VM cent6-ip55
Name PowerState Num CPUs MemoryGB
---- ---------- -------- --------
cent6-ip55 PoweredOn 2 4.000
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI>
電源投入後、初回起動時にホスト名/IPアドレスの設定スクリプトが実行されます。また、完了後、自動的に再起動も行われます。
その8 デプロイ完了
再起動が終わったらデプロイが完了です。