ただ OVF エクスポートすればいいってもんじゃありません!

開発環境の仮想マシンを OVF (または OVA) 化して本番環境にデプロイ (インポート) することはよくあることですが。

デプロイが上手く行かず、困ることも多々あります。

vSphere の仮想環境をユーザとして利用する側としては、おそらく、単純に OVF 化すればいい と思っているかもしれません。

しかし、デプロイに失敗するほとんどの原因は、OVF ファイルそのものにあります。 (大体 OVF エクスポートした人の確認漏れ)

特に、OVF 化する際に 必ず確認しなければならないポイントが 2点ほどあり、これを無視してしまうと 直すために二度手間・三度手間を踏むことになるので、誰かにデプロイしてもらう場合においては、単なる迷惑行為にしかなりません。

本題に入る前に、以下は、OVF デプロイ失敗時の代表的なエラーメッセージです。

ダイアログ : テンプレートをデプロイできません

次のエラー メッセージとともに該当するエンティティに対する「OVF テンプレートのデプロイ」操作に失敗しました。

テンプレートをデプロイできません。

ダイアログだけだと分かりにくいので、デプロイターゲットの ESXi ホスト > 監視 (タブ) > タスクおよびイベント をクリックすると詳細内容が確認できます。

エラー詳細 : VirtualIDEController1:0
  • ステータス : OVF パッケージのデプロイに失敗しました。
  • エラー スタック : 指定の /target-vm/VirtualIDEController1:0 オブジェクトが見つかりませんでした。

OVF 化する前に確認してほしい 2つのポイントとやっちまった時の直し方

仮想マシンを OVF 化 (エクスポート) する際に、以下の条件をクリアしないとデプロイに失敗するので、事前に確認してください。

  • 仮想マシンの器に ISO イメージが接続されてないこと (切断状態であること)
  • OVF 化しようとしている仮想マシンのバージョンは、デプロイ先 ESXi ホストと互換性があるか

特に、仮想マシンと ESXi ホストとの互換性に関しては要注意です。

例えば、仮想マシンのバージョン 11 に対して、デプロイターゲットとなる ESX ホストが 7 までしかサポートしない場合は、vCenter Converter (仮想マシン コンバータ) のようなツールを使って仮想マシンバージョンをダウングレードしてからエクスポートする必要があるため、時間もかかるし面倒です。

大体は、CD/DVD が原因で、直し方は 以下の 2通りあります。

  • OVF をエクスポートする側で CD/DVD を解除した上で、エクスポートし直す
  • OVF をインポートする側で「.ovf 」を修正・「CD/DVD をパススルー」に設定した上で、インポートする

特に、エクスポート対象となる仮想マシンが動いている vSphere の環境 (主に 5.1 / 5.5) と VMware Tools のインストール状況によっては、仮想マシンにマウント (データストア上の ISO イメージ接続) されている CD/DVD 情報までエクスポートされるため、他の環境でインポートする際に、そのデバイス情報が見つからず、デプロイが失敗に終わることが多いです。

解決方法 その1. OVF をエクスポートする側で CD/DVD を解除した上で、エクスポートし直す
 対象 : OVA (単一のファイル) / OVF

CD/DVD をクリーンな状態にしてから OVF 化するだけなので、一番シンプルで分かりやすいですが、仮想マシンの容量によっては時間がかかります。

やるかやらないかは状況・容量次第ですが、特に、相手 (デプロイする側) に稼動をかけたくない場合は、このやり方が無難ではないかと。

仮想マシン (右クリック) > 設定の編集 > 仮想ハードウェア > CD/DVD ドライブ > クライアントデバイス > OK をクリックします。

CD/DVD 無効化 : 仮想マシン編集画面にてクライアントデバイスに設定

後は、Power Off 状態の仮想マシンをエクスポートします。

解決方法 その2. OVF をインポートする側で「.ovf 」を修正・「CD/DVD をパススルー」に設定した上で、インポートする
 対象 : OVF のみ

デプロイする側で .ovf を開いて、CD/DVD の ResourceSubType エントリにパススルーをセットすることでこの問題を回避できます。

その1. のやり方で時間かかりそうだったら、このやり方で対応した方が早いです。

ただ、.ovf を修正した上で、さらに .mf 内にセットされている .ovf のチェックサム値を更新する必要があるため、少し手間はかかります。 (修正後の「.ovf」のサム値を計算し直す必要がある)

Step 1. hoge-vm.ovf を開いて、CD/DVD をパススルーに設定

vmware.cdrom.iso のところを vmware.cdrom.remotepassthrough に修正します。

hoge-vm.ovf (変更前)
 ・・・
  <Item ovf:required="false">
    <rasd:AddressOnParent>0</rasd:AddressOnParent>
    <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
    <rasd:ElementName>CD/DVD drive 1</rasd:ElementName>
    <rasd:InstanceID>8</rasd:InstanceID>
    <rasd:Parent>4</rasd:Parent>
    <rasd:ResourceSubType>vmware.cdrom.iso</rasd:ResourceSubType>
    <rasd:ResourceType>15</rasd:ResourceType>
  </Item>
  ・・・
hoge-vm.ovf (変更後)
 ・・・
  <Item ovf:required="false">
    <rasd:AddressOnParent>0</rasd:AddressOnParent>
    <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
    <rasd:ElementName>CD/DVD drive 1</rasd:ElementName>
    <rasd:InstanceID>8</rasd:InstanceID>
    <rasd:Parent>4</rasd:Parent>
    <rasd:ResourceSubType>vmware.cdrom.remotepassthrough</rasd:ResourceSubType>
    <rasd:ResourceType>15</rasd:ResourceType>
  </Item>
  ・・・

Step 2. hoge-vm.mf に ovf ファイルの新しいチェックサム値を設定

これで終わりなら嬉しいですが、もう一手間必要です。

.ovf のサム値は、.mf ファイル内にセットされているため、今回更新した hoge-vm.ovf の新しいチェックサム値を再計算し、hoge-vm.mf に反映させる必要があります。

裏技として、hoge-vm.mf を消してからデプロイする方法もありますが、可能であれば、以下のように正しい方法で .mf を修正してください。 (そもそも「.mf」が存在しなかった場合、この手順は飛ばしても構いません)

Windows 環境の場合は、MS 公式の FCIV というコマンドを使えばチェックサム値の計算が出来ますが、ツールが入ってない場合はインストールが必要です。

Linux 環境なら sha1sum コマンドを使えば、簡単にファイルのチェックサム値を取得することができるので、.ovf のサム値を取得した上で、hoge-vm.mf ファイルを開き、新しいサム値をセットします。

hoge-vm.ovf のチェックサム値 再計算
1
2
# sha1sum ./hoge-vm.ovf
56f2145e073224839bf028bc1309fa6c36cc9cf4
hoge-vm.mf
1
2
SHA1(hoge-vm.ovf)= 56f2145e073224839bf028bc1309fa6c36cc9cf4
SHA1(hoge-vm-disk1.vmdk)= 3a2a390166a8d6a522f04106ca5d802342933348

.mf 修正時の注意点

.mf ファイルを修正する際には、以下の点に注意してください。
  • 設定箇所を間違えないように注意 (.vmdk ではなく、.ovf 行にサム値をセットすること)
  • 改行コードは、LF (UNIX)

特に、改行コードは UNIX フォーマットになっているため、Windows 環境で修正する際には注意が必要です。(メモ帳はダメ。 改行コードが視覚的に見える / 改行コードを自由に変更できる Sakura エディタ等がオススメです)

参考 :「.mf」を更新しなかった場合は、デプロイ開始不可

.mf.ovf の新しいサム値を設定しなかった場合は、以下のエラーでデプロイを開始できないので、ご参考までに。

.mf のチェックサムを更新しなかった場合のエラーメッセージ : 指定された生成ファイルのチェックサムが source-vm.ovf ファイルの内容と一致しません。
  • 指定された生成ファイルのチェックサムが source-vm.ovf ファイルの内容と一致しません。

その他、デプロイ時に発生するエラーと対処方法

指定された生成ファイルのチェックサムが 「hoge-vm.vmdk」 ファイルの内容と一致しません

これでデプロイが開始され、後は待つだけか。と思いきや、20分くらい待ってたら 指定された生成ファイルのチェックサムが 「hoge-vm.vmdk」 ファイルの内容と一致しません。 というエラーメッセージで失敗してがっかり。

先ほどの .ovf チェックサムエラーと似たようなメッセージですが、.vmdk に関するチェックサムエラーで失敗する時もあります。

エラーメッセージ : 指定された生成ファイルのチェックサムが「.vmdk」ファイルの内容と一致しません。

こういった場合は、デプロイ時のターゲットネットワークを分散スイッチのポートグループではなく、標準スイッチのポートグループにセットすればうまく行くと思いますので、試して見てください。

OVF パラメータ chunkSize の値が NNNNNNNNNN の場合、OVF パッケージのインポートはサポートされません

この問題は、OVF の chunkSize パラメータがサポートされてない環境 (特に、vCenter Server 6.5) でデプロイした場合に発生します。

エラーメッセージ : OVF パラメータ chunkSize の値が 7516192768 の場合、OVF パッケージのインポートはサポートされません

以下の KB にも記載があるように、この問題を解決するためは、.ovf から chunkSize 属性を削除してからデプロイするだけで良いですが、.ovf ではなく、.ova の場合は、ちょっとややこしくなります。

  1. tar で「.ova」を展開した上でそうすると「.vmdk / .ovf」等のファイルが出てくる
  2. 全ての「.vmdk*」を cat して、一つの「.vmdk」にまとめて
  3. その後、「.ovf」から chunkSize 属性を削除してから
  4. OVF をデプロイする

ぱっと見 VMDK ファイルを cat している時点でやる気がなくなりますが、場合によっては (ESXi ホストのバージョンによりますが)、このような面倒なことをやらなくて済む裏技というか迂回策はあります。

やり方としては、vCenter へログインするのではなく、直接 ESXi ホストへログインすれば、問題なくデプロイできます。

ただ、ESXi ホストが vCenter によって管理されている場合において、vCenter Server を介さずに仮想マシンを登録するとホストと vCenter のインベントリの間で不一致が起こり、予期しない結果を招く恐れがあるため、オススメはできませんが、どうしてもやりたい場合は、試して見てください。

私は普通にやってますが、やっぱり直接 ESXi にログインしてデプロイすると気持ち的にスッキリしないので、一手間かけて、以下のようなことをやっています。

  1. ESXi へ直接ログイン
  2. デプロイ開始
  3. デプロイ完了後、仮想マシン右クリック → インベントリから削除インベントリから削除する前にデータストア名を確認しておく
  4. vCenter へログイン
  5. データストアブラウザを開き、先ほどデプロイした仮想マシンの「.vmx」を右クリックし、vCenter のインベントリへ登録

ちなみに、旧 vSphere Client (C#・Windows クライアント) は、vSphere 6.5 から廃止され使えなくなったため、このクライアントで vCenter Server 6.5 へログインすることはできませんが、vCenter Server が 6.5 であっても、デプロイターゲットの ESXi ホストのバージョンが 6.0 までだったら、ESXi ホストへ直接ログインすることが可能です。

接続先 : ESXi ホストの FQDN / IP アドレス

ID : root 固定

ログインできたら 後は、デプロイするだけです。

参考までに、デプロイ開始直後、タスクに その操作は、現在の状態では実行できません。 というエラーが出ますが、デプロイは完了します。

転送に失敗しました。 OVF 記述子が利用できません

この場合も、先と同じやり方で、直接 ESXi ホストへログインしてからデプロイします。

その他、エクスポート時に発生するエラーと対処方法 & 注意点 等

エクスポートの失敗 : 仮想マシンのエクスポートに失敗しました: Unable to connect to the remote server

エクスポートの失敗 : 仮想マシンのエクスポートに失敗しました: Unable to connect to the remote server

エクスポート時に、このようなエラーで失敗した場合は、作業中の端末とエクスポート対象仮想マシンが動いている ESXi ホスト間フィルタが開いてない可能性が高いので、フィルタ (ファイアウォール) を開けてください。

OVF エクスポートする際の注意点

OVF エクスポートする際に、ファイルの保存場所を指定するための、ダウンロード用のダイアログが 2つ・3つ (.vmdk / .ovf 等) ポップアップされます。

vSphere Web Client (Flex) / vSphere Client (HTML5) を使ってる場合は、ブラウザの設定でポップアップがブロックされているとエクスポート出来ないので、ブラウザの設定でポップアップを有効にしてください。

ファイルを保存場所を指定する際には、拡張子をよく確認してください。

例えば、ファイルの拡張子がなぜか .iso になっている場合は、仮想マシンに ISO イメージが接続されている証拠なので、解決方法 その1. を参考にし、仮想マシン器に接続されている CD/DVD の接続を解除してください。

終わりに

自分用であれば、別に直して使えばいいだけなんですが、その相手 (デプロイする人) が第三者であれば、せっかく完成した成果物・納品物が相手(お客さん)に低評価されたり、無駄な稼動発生による開発遅延 等で悪い印象を残すこともあるので、気を付けた方が良いです。

ちなみに、OVA / OVF エクスポートするためには、仮想マシンが停止状態でなければなりません。(Power Off 状態でないとエクスポートできない)

どうしても仮想マシンを落とせないなら「クローン作成 → クローンをエクスポート」することで解決できます。

以上、OVA / OVF : テンプレートをデプロイできません でした。