ただ 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 を無効化」した上で、インポート (デプロイ) し直す

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

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

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

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

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

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

解決方法 その2. OVF をインポートする側で「.ovf 」を修正・「CD/DVD を無効化」した上で、インポートし直す
 対象 : OVF のみ

デプロイする側で .ovf を開いて、CD/DVD を無効化する方法です。

その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 を修正してください。

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 ファイルの内容と一致しません。

終わりに

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

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

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

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