PowerShellを使ってVMwareのテンプレートからデプロイで「既存のカスタマイズ仕様を使用してカスタマイズする」を行う方法

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 デプロイ完了

再起動が終わったらデプロイが完了です。

vRealize Configuration Managerで401 Unauthorizedのエラーがでる

vRealize Configuration Manager v5.7.3.211(旧vCenter Configuration Manager)を設定中、以下のメッセージが表示される場面がいくつかあった。

vcm-001

An error has occurred during report processing.

HTTP ステータス 401: Unauthorized で要求が失敗しました。

エラーの内容としては「SSRS authentication must be configured in two-tier and three-tier installation environments that use Basic authentication (2000082)」にあるものと同じ。

「rsreportserver.config内の認証設定を書き換えろ」とあるけど、既に書き換えてるし、そもそも、うちの環境one-Tier構成だしなぁ・・・と悩む。
あとで分かるんだけど、実は、ここに誤りがありました・・・

で、いろいろ試していった結果、次のblogを発見。

Adventures in a Virtual World:「vCenter Configuration Manager – First Run
同じようにone-tier構成で現象が発生していて、IEの設定を変更して直った、とのこと。

なるほど、と[インターネットオプション]-[セキュリティタブ]にて、「信頼済みサイト」のレベルをカスタマイズ。
「Display mixed contentをEnableにする」というのは日本語だと「混在したコンテンツを表示する、を、有効にする」になる。
vcm-004

が・・・設定しても変わらない。

で・・・もう1度、インストールガイドを読み直したところ、自分が実施した手順に誤りを発見。
one-Tier構成の場合、rsreportserver.configの認証設定の変更は不要、ということ。

・・・最初うまく動かなかったところがあったから、設定したはずなんだけど、と思いつつ、rsreportserver.configの設定を元に戻すと・・・
vcm-005
表示できた・・・

初期設定通りの

<Authentication>
    <AuthenticationTypes>
        <RSWindowsNegotiate/>
        <RSWindowsNTLM/>
    </AuthenticationTypes>

であれば問題なかったという・・・

なぜ、最初はうまく動かなかったんだろうか・・・・

hp ProLiant Gen8サーバのiLOをESXiからアップデートする

VMware ESXiサーバとして動作しているhp ProLiant DL380p Gen8サーバのiLOをアップデートした。

まず、ESXi上から、iLOのバージョンと、iLOに割り当てられているIPアドレスを確認するため「hponcfg」コマンドを実行

/tmp # /opt/hp/tools/hponcfg -g
HP Lights-Out Online Configuration utility

Version 4.4-0 (c) Hewlett-Packard Company, 2014
Firmware Revision = 1.40 Device type = iLO 4 Driver name = hpilo
iLO IP Address: 172.17.15.99
Host Information:
                        Server Name: esxi1.osakana.local
                        Server Serial Number: SGH421XXXX
/tmp #

iLOのアップデータファイル CP025110.scexe を、/tmpに配置し、実行権限を与え、実行。

/tmp # chmod a+x CP025110.scexe
/tmp # ./CP025110.scexe
OS Version found  [5.5.0]
sh: 6.0=./ESXi_5.5: unknown operand
./CP025110.scexe: Okay process the path [./ESXi_5.5 6.0]
sh: 6.0: unknown operand
./CP025110.scexe:  Update flash engine from ./ESXi_5.5 6.0
sh: 6.0/clean_target_location.sh: unknown operand
sh: 6.0/copy_FE_to_target_location.sh: unknown operand
Copy Flash Engine files from [./ESXi_5.5 6.0] to [/tmp/sctmpdir4924713]
cp: './ESXi_5.5' and './ESXi_5.5' are the same file
cp: can't stat '6.0/*': No such file or directory

iLO Flasher v1.0.2-2 for VMware ESXi (Jan  7 2014)
(C) Copyright 2002-2014 Hewlett-Packard Development Company, L.P.
Firmware image: ./ilo4_203.bin
Current iLO 4 firmware version  1.40; Serial number ILOSGH421XXXX

Component XML file: ./CP025110.xml
./CP025110.xml reports firmware version 2.03
This operation will update the firmware on the
iLO 4 in this server with version 2.03.
Continue (y/N)?y
Current firmware is  1.40 (Jan 14 2014 00:00:00)
Firmware image is 0x1001b1c(16784156) bytes
Committing to flash part...
******** DO NOT INTERRUPT! ********
Flashing is underway... 100 percent programmed. \
Succeeded.
***** iLO 4 reboot in progress (may take up to 60 seconds.)
***** Please ignore console messages, if any.
iLO 4 still rebooting. Try again...
iLO 4 reboot completed.
/tmp #

firmwareのバージョンが上がっていることを確認。

/tmp #  /opt/hp/tools/hponcfg -g
HP Lights-Out Online Configuration utility

Version 4.4-0 (c) Hewlett-Packard Company, 2014
Firmware Revision = 2.03 Device type = iLO 4 Driver name = hpilo
iLO IP Address: 0.0.0.0
Host Information:
                        Server Name: esxi1.osakana.local
                        Server Serial Number: SGH421XXXX
/tmp #

・・・と、実行が早すぎたようで、DHCPで割り当てているIPアドレスが「0.0.0.0」となっている。
時間をおいて再実施

/tmp #  /opt/hp/tools/hponcfg -g
HP Lights-Out Online Configuration utility

Version 4.4-0 (c) Hewlett-Packard Company, 2014
Firmware Revision = 2.03 Device type = iLO 4 Driver name = hpilo
iLO IP Address: 172.17.15.99
Host Information:
                        Server Name: esxi1.osakana.local
                        Server Serial Number: SGH421XXXX
/tmp #

これで、問題なしですね。

IPFireでパッケージのインストールやアップデートができない

ESXiの上で、ネットワークを2つ作り、それぞれをVPN接続する、というテスト環境を作ろうとした。

VPNルータをどうするか悩んだのだが、Linuxベースの「IPFire」というので構築することにした。
(Endian FirewallのComminity Editionだとうまく構成が作れなかった)

決め手の1つに、vmware-toolsを容易にインストールすることができる、ということがあった。
が、「手順」の通りにやろうとしても、エラーとなる。

状況としては、「pakfire update problem」と全く同じモノ。
(上記のURLよりエラーを引用)

Sep  7 21:15:34 serwer1 pakfire: PAKFIRE INFO: IPFire Pakfire 2.15 started!
Sep  7 21:15:34 serwer1 pakfire: CRYPTO INFO: Checking GnuPG Database
Sep  7 21:15:34 serwer1 pakfire: CRYPTO WARN: The GnuPG isn't configured corectly. Trying now to fix this.
Sep  7 21:15:34 serwer1 pakfire: CRYPTO WARN: It's normal to see this on first execution.
Sep  7 21:17:34 serwer1 pakfire: Sending my uuid: 168d3c61-ae2a-454f-81a1-48a817470c37
Sep  7 21:17:34 serwer1 pakfire: DOWNLOAD STARTED: counter.py?ver=2.15&uuid=168d3c61-ae2a-454f-81a1-48a817470c37
Sep  7 21:17:34 serwer1 pakfire: DOWNLOAD INFO: Host: pakfire.ipfire.org (HTTP) - File: counter.py?ver=2.15&uuid=168d3c61-ae2a-454f-81a1-48a817470c37
Sep  7 21:17:34 serwer1 pakfire: DOWNLOAD INFO: HTTP-Status-Code: 200 - 200 OK
Sep  7 21:17:34 serwer1 pakfire: DOWNLOAD STARTED: 2.15/lists/server-list.db
Sep  7 21:17:34 serwer1 pakfire: DOWNLOAD INFO: Host: pakfire.ipfire.org (HTTP) - File: 2.15/lists/server-list.db
Sep  7 21:17:35 serwer1 pakfire: DOWNLOAD INFO: 2.15/lists/server-list.db has size of 907 bytes
Sep  7 21:17:35 serwer1 pakfire: DOWNLOAD INFO: HTTP-Status-Code: 200 - 200 OK
Sep  7 21:17:35 serwer1 pakfire: DOWNLOAD INFO: File received. Start checking signature...
Sep  7 21:17:35 serwer1 pakfire: DOWNLOAD ERROR: The downloaded file (2.15/lists/server-list.db) wasn't verified by IPFire.org. Sorry - Exiting...
Sep  7 21:18:06 serwer1 pakfire: TIME INFO: Time Server 217.153.128.243 has 0.010834 sec offset to localtime.

解決方法として、外部の11371ポートに対する通信を許可すること、と書かれている。
PakfireのAdditional Note

IPFireの設定をいじってみても解決しない。
なぜ?と考えて見ると、今回作成したテスト環境は、別のFirewallの中にある、というのがポイントだった。
つまり、別のFirewall側に設定を追加する必要があったということ。

そちらの設定変更権限はないので、別の方策がないか捜索したところ、発見。

Pakfire wont update on new install The GnuPG isn’t configured corectly. solved!

「/opt/pakfire/lib/functions.pl」内で
「my $command = “gpg –keyserver pgp.ipfire.org –always-trust –status-fd 2”;」
と書かれているところ、下記のようにポート80でアクセスできるサーバに書き直す。
「my $command = “gpg –keyserver hkp://keyserver.ubuntu.com:80 –always-trust –status-fd 2”;」
というもの。

これを実施したところ、正常に動作するようになった。

ちなみに、上記URLだと、「Core 82で直った」とか書かれてますが、Core82で試して同じ現象でした。

vSphere Flash Read Cache(vFRC)でSSDが見付からない

vSphere Flash Read Cache(vFRC)を使ってみようとセットアップしようとした。
しかし、「SSD」として認識されているものの「仮想フラッシュリソース管理」で該当デバイスが出てこない。

どういうことか調査した。

1. esxcfg-scsidevsコマンドでの認識状況

下記の様になっている。

~ # esxcfg-scsidevs -l
naa.600508b1001c3c4aacc8c33d825d7ff4
   Device Type: Direct-Access
   Size: 114439 MB
   Display Name: HP Serial Attached SCSI Disk (naa.600508b1001c3c4aacc8c33d825d7ff4)
   Multipath Plugin: NMP
   Console Device: /vmfs/devices/disks/naa.600508b1001c3c4aacc8c33d825d7ff4
   Devfs Path: /vmfs/devices/disks/naa.600508b1001c3c4aacc8c33d825d7ff4
   Vendor: HP        Model: LOGICAL VOLUME    Revis: 5.42
   SCSI Level: 5  Is Pseudo: false Status: degraded
   Is RDM Capable: true  Is Removable: false
   Is Local: false Is SSD: true
   Other Names:
      vml.0200030000600508b1001c3c4aacc8c33d825d7ff44c4f47494341
   VAAI Status: unknown
<略>
~ #

ここでの注目ポイントは
「Is Local:」と「Is SSD:」の値。

「Is Local: false Is SSD: true」とは、「Localではなくが、SSDである」と認識されていることになる。

2. esxcli storage vflash device listでの認識状況

vFRCの旧名である「vflash」という名前を持つコマンドを使って、SSDデバイスの認識状況を確認する。

~ # esxcli storage vflash device list
Name                                    Size  Is Local  Is Used in vflash  Eligibility
------------------------------------  ------  --------  -----------------  ----------------------------
naa.600508b1001c3c4aacc8c33d825d7ff4  114439     false              false  Detected as a remote SAS SSD
~ #

「Detected as a remote SAS SSD」と認識されていることが何かのキーになっている、ということもうかがえる。

では、どのようにすれば使える様になるのか?

「Detected as a remote SAS SSD」というメッセージを手がかりに探したところ、VMwareのcommunityに「” Detected as a remote SAS SSD” vFlash」というのを発見。

the solution. thanks for the pointer vfrank.org

esxcli storage nmp satp rule add –satp VMW_SATP_LOCAL –device naa.XXXXXX 0 –option enable_local

esxcli storage core claiming reclaim -d naa.XXXXXXX

該当デバイスの「Is local」認識を強制的に変更する、というもの。
上記コマンド例では「–device naa.XXXXXX 0 –option enable_local」とあるが「0」がなぜ入っているのかよく分からない。
エラーになったので、実行したのは「esxcli storage nmp satp rule add –satp VMW_SATP_LOCAL –device naa.XXXXXX –option enable_local」と「esxcli storage core claiming reclaim -d naa.XXXXXXX」となる。

~ # esxcli storage nmp satp rule add --satp VMW_SATP_LOCAL --device naa.600508b1001c3c4aacc8c33d825d7ff4 --option enable_local
~ #  esxcli storage vflash device list
Name                                    Size  Is Local  Is Used in vflash  Eligibility
------------------------------------  ------  --------  -----------------  ----------------------------
naa.600508b1001c3c4aacc8c33d825d7ff4  114439     false              false  Detected as a remote SAS SSD
~ # esxcli storage core claiming reclaim -d naa.600508b1001c3c4aacc8c33d825d7ff4
~ # esxcli storage vflash device list
Name                                    Size  Is Local  Is Used in vflash  Eligibility                            
------------------------------------  ------  --------  -----------------  -------------------------------------------
naa.600508b1001c3c4aacc8c33d825d7ff4  114439      true              false  Yes, there are valid partitions for vflash
~ #

これにより「Is Local true」となった。

esxcfg-scsidevsでも、「Is Local: true Is SSD: true」となった。

~ # esxcfg-scsidevs -l
naa.600508b1001c3c4aacc8c33d825d7ff4
   Device Type: Direct-Access
   Size: 114439 MB
   Display Name: HP Serial Attached SCSI Disk (naa.600508b1001c3c4aacc8c33d825d7ff4)
   Multipath Plugin: NMP
   Console Device: /vmfs/devices/disks/naa.600508b1001c3c4aacc8c33d825d7ff4
   Devfs Path: /vmfs/devices/disks/naa.600508b1001c3c4aacc8c33d825d7ff4
   Vendor: HP        Model: LOGICAL VOLUME    Revis: 5.42
   SCSI Level: 5  Is Pseudo: false Status: on
   Is RDM Capable: false Is Removable: false
   Is Local: true  Is SSD: true
   Other Names:
      vml.0200030000600508b1001c3c4aacc8c33d825d7ff44c4f47494341
   VAAI Status: unknown
<略>
~ #

この状態となったら、GUIからvFRCの設定が行えるようになった。

該当SSDに対してvFRCの設定を行ったあとの「esxcli storage vflash device list」の結果は以下の様になった。

~ # esxcli storage vflash device list
Name                                    Size  Is Local  Is Used in vflash  Eligibility
------------------------------------  ------  --------  -----------------  ---------------------------------
naa.600508b1001c3c4aacc8c33d825d7ff4  114439      true               true  It has been configured for vflash
~ #