OVF ToolはOVFまたはOVAによる仮想マシンデプロイをコマンドラインで操作するツールです。検証用途などで似たような仮想マシンを何度もデプロイする方は定型業務をOVF Toolでスクリプト化しておくと、作業ミス低減や作業スピードアップを図れるでしょう。このページではovftoolの使い方をまとめます。
前提
参照資料
OVF ToolはVMware本体のサイトではなく「https://developer.vmware.com/」にドキュメントが掲載されています。比較的更新頻度が早いので、上記がリンク切れになっている場合はトップページから公式ドキュメントをお探しください。
例えば、検索窓に「OVF Tool Release Notes」と入力します。
すると、以下のように検索結果が表示されます。
動作確認済環境
- vCenter 7.0U3f (7.0.3-20051473)
- ESXi 7.0U3f (7.0.3-20036589)
- Windows 10 21H2
- Rocky Linux 8.6
最新のサポートOSは「VMware OVF Tool Release Notes」を参照ください。Rocky Linuxは非サポートですので、自己責任でご利用ください。
OVF Toolのダウンロード
OVF Toolは殆どのVMware製品の付属品(Drivers & tools)の位置付けになっています。ダウンロードリンクは様々なページに貼られていますが、一例として「Download VMware vSphere」のページをブラウザで開きます。
「Drivers & Tools」「Automation Tools and SDK(s)」の順に押下し、「OVFTOOL」欄の「GO TO DOWNLOADS」を押下します。
ご利用のOSに合わせたダウンロードリンクを押下します。
OVF Toolのインストール
Linux環境の場合
インストール操作
bundleファイルに実行権限を与え、実行します。
chmod 755 VMware-ovftool-4.4.3-18663434-lin.x86_64.bundle ./VMware-ovftool-4.4.3-18663434-lin.x86_64.bundle
EULA(End User License Agreement)の同意を求められます。EnterキーでEULAが表示されます。
[root@linux050 ~]# ./VMware-ovftool-4.4.3-18663434-lin.x86_64.bundle Extracting VMware Installer...done. You must accept the VMware OVF Tool component for Linux End User License Agreement to continue. Press Enter to proceed.
エンターキーやスペースキーなどでEULAを画面下へスクロールされます。最後にEULAに同意するかどうか求められますので、「yes」と入力します。
12.12 Contact Information. Please direct legal notices or other correspondence to VMware, Inc., 3401 Hillview Avenue, Palo Alto, California 94304, United States of America. If You have any questions concerning this EULA, please send an email to info@vmware.com. Do you agree? [yes/no]: yes
エンターキーでインストールが開始されます。
The product is ready to be installed. Press Enter to begin installation or Ctrl-C to cancel.
インストール完了まで待ちます。
Installing VMware OVF Tool component for Linux 4.4.3 Configuring... [######################################################################] 100% Installation was successful. [root@linux050 ~]#
不足パッケージ追加 : libnsl
動作確認のため、ovftoolに引数--versionを与えて実行します。もしかしたら、何らかのエラーが発生するかもしれません。エラーメッセージより不足するパッケージを確認します。
[root@linux050 ~]# ovftool --version /usr/lib/vmware-ovftool/ovftool.bin: error while loading shared libraries: libnsl.so.1: cannot open shared object file: No such file or directory [root@linux050 ~]#
適宜不足するパッケージをインストールします。
dnf install libnsl
ovftool --versionコマンドが実行可能である事を確認します。
[root@linux050 ~]# ovftool --version VMware ovftool 4.4.3 (build-18663434) [root@linux050 ~]#
Windows環境の場合
インストール操作
前述の操作でダウンロードしたmsiファイルをダブルクリックで実行します。
「Next」を押下します。
「I Accept the terms in the License Agreement」にチェックを入れ、「Next」を押下します。
インストール先のディレクトリをメモに控えて下さい。この値は後の操作で使用します。デフォルト設定の場合は「C:\Program Files\VMware\VMware OVF Tool」になります。以降の操作は特段の注意点はございません。
動作確認
コマンドプロンプトを開き、OVF toolのインストール先ディレクトリへ移動します。「ovftool --version」コマンドが実行可能である事を確認します。
C:\Users\admin>cd "C:\Program Files\VMware\VMware OVF Tool" C:\Program Files\VMware\VMware OVF Tool>ovftool --version VMware ovftool 4.4.3 (build-18663434) C:\Program Files\VMware\VMware OVF Tool>
OVF Toolの使い方
OVF Toolのヘルプ表示
ovftool -hコマンドを実行すると、ovftoolに与える引数を調査できます。必要に応じてヘルプを参照しましょう。
[root@linux050 ~]# ovftool -h Usage: ovftool [options] <source> [<target>] where <source>: Source URL locator to an OVF package, VMX file, or virtual machine in vCenter or on ESX Server. <target>: Target URL locator which specifies either a file location, or a location in the vCenter inventory or on an ESX Server. If <target> is not specified, information about the source is displayed to the console. Options: --acceptAllEulas : Accept all end-user licenses agreements without being prompted. --allowAllExtraConfig : Whether we allow all the ExtraConfig options. These options are a security risk as they control low-level and potential unsafe options on the VM. --allowExtraConfig : Whether we allow ExtraConfig options. These options are a security risk as they control low-level and potential unsafe options on the VM. <omitted>
OVF Toolの主要な引数
ディスク関連
以下の引数で仮想マシン名を指定できます。
ovftool \ --name=<仮想マシン名>
ディスク関連
以下の引数でディスクモード(thin, thickなど)やデータストアを指定できます。
ovftool \ --diskMode=<ディスクモード> \ --datastore=<データストア名>
ネットワーク関連
以下の引数でポートグループを指定できます。
ovftool \ --net:"<仮想NIC名1>=<ポートグループ名1>" \ --net:"<仮想NIC名2>=<ポートグループ名2>"
以下のように引数にOVAファイルのみを指定すると、OVAファイル内に格納されたOVFファイルの情報を閲覧できます。この出力から仮想NIC名を調査すると良いでしょう。以下出力の場合は、「VM Network」が仮想NIC名です。
[root@linux050 ~]# ovftool 010-rocky86.ova OVF version: 1.0 VirtualApp: false Name: 010-rocky86 Download Size: Unknown Deployment Sizes: Flat disks: 50.00 GB Sparse disks: Unknown Networks: Name: VM Network Description: The VM Network network <omitted>
証明書エラーの無視
OVA templateには証明書を含める事ができます。証明書が含まれていない場合はエラーが出力されますが、これを無視するには以下引数を与えます。
ovftool \ --noSSLVerify
自動起動
以下の引数でOVA templateのデプロイ後に自動的に仮想マシンが起動します。地味に便利です。
ovftool \ --powerOn
ログ出力
以下の引数でOVA templateデプロイ時のログをファイルに出力する事ができます。
ovftool \ --X:logFile=<ログファイル名>
vAppオプション
以下スクリーンショットのようにOVA templateにはvAppプロパティを含める事もできます。以下スクリーンショットのように、vCenterなどでOVAをインポートする場合は「テンプレートのカスタマイズ」などと表示されます。
デフォルトの状態で、このようなvAppプロパティはovftoolで指定する事はできません。vAppプロパティを指定可能なようにするには、以下引数を与える必要があります。
ovftool \ --allowExtraConfig
デプロイ先URLの指定
vCenterの場合
ovftoolを用いたデプロイをする場合は、デプロイ先のvCenterまたはESXiのURLを指定する必要があります。vCenterのURLの書式は以下のようになります。
vi://<vCenterユーザ名>:<vCenterパスワード>@<vCenter FQDN>/?ip=<ESXi IPアドレス>
ESXiホストの場合
ESXiのURLの書式は以下のようになります。
vi://<ESXiユーザ名>:<ESXiパスワード>@<ESXi FQDN>/
OVF Toolの操作例
OVA templateの操作例
以下スクリーンショットのようなvCenterに対してOVAファイルをデプロイします。
OVAファイルのデプロイ操作例は以下のようになります。
ovftool \ --name=020-linux \ --X:logFile=ovftool.log \ --powerOn \ --noSSLVerify \ --net:"VM Network=vds01-pg01" \ --diskMode=thin \ --datastore=datastore30 \ 010-rocky86.ova \ vi://administrator@gokatei.go:P@ssw0rd@vcenter20.gokatei.go/?ip=192.168.20.30
ログは以下のように出力されます。
[root@linux050 ~]# ovftool \ > --name=020-linux \ > --X:logFile=ovftool.log \ > --powerOn \ > --noSSLVerify \ > --net:"VM Network=vds01-pg01" \ > --diskMode=thin \ > --datastore=datastore30 \ > 010-rocky86.ova \ > vi://administrator@gokatei.go:P@ssw0rd@vcenter20.gokatei.go/?ip=192.168.20.30 Opening OVA source: 010-rocky86.ova Opening VI target: vi://administrator%40gokatei.go@vcenter20.gokatei.go:443/ Deploying to VI: vi://administrator%40gokatei.go@vcenter20.gokatei.go:443/ Transfer Completed The manifest validates Powering on VM: 020-linux Task Completed Warning: - No supported manifest(sha1, sha256, sha512) entry found for: '010-rocky86-1.vmdk'. - No supported manifest(sha1, sha256, sha512) entry found for: '010-rocky86-2.nvram'. Completed successfully [root@linux050 ~]#
デプロイの進捗は、CLIだけでなくGUI(vCenter)でも確認できます。
OVF templateの操作例
OVFファイルも同様にovftoolを用いたデプロイが可能です。ただし、OVFファイルをデプロイする場合は、以下のようにOVFファイルとmfファイルやvmdkファイルなどを同一ディレクトリに格納する必要があります。
[root@linux050 ~]# ls -l work/ 合計 2251796 -rw-r--r-- 1 root root 2305549824 7月 23 21:31 010-rocky86-1.vmdk -rw-r--r-- 1 root root 270840 7月 23 21:26 010-rocky86-2.nvram -rw-r--r-- 1 root root 277 7月 23 21:31 010-rocky86.mf -rw-r--r-- 1 root root 6863 7月 23 21:26 010-rocky86.ovf [root@linux050 ~]#
OVFファイルをデプロイする操作例は以下の通りです。
ovftool \ --name=030-linux \ --X:logFile=ovftool.log \ --powerOn \ --noSSLVerify \ --net:"VM Network=vds01-pg01" \ --diskMode=thin \ --datastore=datastore30 \ work/010-rocky86.ovf \ vi://administrator@gokatei.go:P@ssw0rd@vcenter20.gokatei.go/?ip=192.168.20.30
ESXiホストへデプロイする操作例
以下操作のようにデプロイ先URLをESXiホストにする事もできます。ただし、この操作をする場合はVDS(分散仮想スイッチ)を指定できずVSS(標準仮想スイッチ)しか指定できない事に注意ください。
ovftool \ --name=040-linux \ --X:logFile=ovftool.log \ --powerOn \ --noSSLVerify \ --net:"VM Network=vSwitch01_vlan0000" \ --diskMode=thin \ --datastore=datastore31 \ work/010-rocky86.ovf \ vi://root:P@ssw0rd@192.168.20.31/
補足
vAppオプションを持つ仮想マシンのデプロイ
以下スクリーンショットのようにvAppオプションが存在するOVAファイルのデプロイ方法を説明します。以下、VMware ESX-T Edge 3.2.1を例に挙げます。
どのようなプロパティが指定可能かは、ovftoolコマンドに引数--allowExtraConfigとOVAファイル名を指定すると確認できます。
[root@linux050 ~]# ovftool \ > --allowExtraConfig \ > nsx-edge-3.2.1.0.0.19801966.ova <omitted> Properties: Key: nsx_grub_passwd Category: Application Label: System GRUB Root User Password Type: password Description: The password for GRUB root user for this VM. Key: nsx_grub_menu_timeout Category: Application Label: System GRUB menu timeout Type: string Description: The timeout to display GRUB menu for this VM. Key: nsx_passwd_0 Category: Application Label: System Root User Password Type: password(12..) Description: The password for root user for this VM. Please follow the password complexity rule as below: - minimum of 12 characters in length - >=1 uppercase character - >=1 lowercase character - >=1 numeric character - >=1 special character - >=5 unique characters - default password complexity rules as enforced by the Linux PAM module NOTE: Password strength validation will occur during VM boot. If the password does not meet the above criteria then login as root user for the change password prompt to appear. <omitted>
以下の引数でvAppプロパティを指定できます。
ovftool \ --prop:"<プロパティ名1>=<プロパティ値1>" \ --prop:"<プロパティ名2>=<プロパティ値2>" \ --prop:"<プロパティ名3>=<プロパティ値3>"
操作例は以下の通りです。
ovftool \ --name=nsx-edge050 \ --deploymentOption=small \ --X:logFile=ovftool.log \ --allowExtraConfig \ --datastore=datastore30 \ --net:"Network 0=vds01-pg01" \ --net:"Network 1=vds01-pg01" \ --net:"Network 2=vds01-pg01" \ --net:"Network 3=vds01-pg01" \ --net:"Network 4=vds01-pg01" \ --acceptAllEulas \ --noSSLVerify \ --diskMode=thin \ --prop:nsx_ip_0="192.168.20.50" \ --prop:nsx_netmask_0="192.168.20.1" \ --prop:nsx_gateway_0="255.255.255.0" \ --prop:nsx_dns1_0="192.168.20.1" \ --prop:nsx_ntp_0="192.168.20.1" \ --prop:nsx_domain_0="gokatei.go" \ --prop:nsx_isSSHEnabled=True \ --prop:nsx_allowSSHRootLogin=True \ --prop:nsx_passwd_0="P@ssw0rdP@ssw0rd" \ --prop:nsx_cli_passwd_0="P@ssw0rdP@ssw0rd" \ --prop:nsx_hostname=nsx-edge050.gokatei.go \ nsx-edge-3.2.1.0.0.19801966.ova \ vi://administrator@gokatei.go:P@ssw0rd@vcenter20.gokatei.go/?ip=192.168.20.30
vCenterの画面にて「仮想マシン名」「構成」「(設定)vAppオプション」の順に押下すると、想定通りのプロパティ値が設定されているかどうかを確認できます。
エラー OVAファイル格納順の問題
vCenterなど殆どのOVAファイル展開ツールは問題ないのですが、ovftoolなど一部ツールはOVAファイルの先頭にOVFファイルがある事を期待しています。以下のように、OVAファイルを作成する時に「*指定(アルファベット順)」でファイルを格納すると、展開時にエラーが発生します。
[root@linux050 work]# ls -l 合計 2251796 -rw-r--r-- 1 root root 2305549824 7月 23 21:31 010-rocky86-1.vmdk -rw-r--r-- 1 root root 270840 7月 23 21:26 010-rocky86-2.nvram -rw-r--r-- 1 root root 277 7月 23 21:31 010-rocky86.mf -rw-r--r-- 1 root root 6863 7月 23 21:26 010-rocky86.ovf [root@linux050 work]# [root@linux050 work]# [root@linux050 work]# tar cvf 010-rocky86.ova * 010-rocky86-1.vmdk 010-rocky86-2.nvram 010-rocky86.mf 010-rocky86.ovf [root@linux050 work]# [root@linux050 work]# [root@linux050 work]# ovftool 010-rocky86.ova Error: Did not find an .ovf file at the beginning of the OVA package. [root@linux050 work]#
このエラーを解消するには、以下のように先頭をOVFファイルにしてOVAを作成ください。
tar cvf 010-rocky86.ova \ 010-rocky86.ovf \ 010-rocky86-1.vmdk \ 010-rocky86-2.nvram \ 010-rocky86.mf