これは、HashiCorp Advent Calendar 2015の9日目の記事です。
Packerって何というのは説明しませんので、公式ページを読んでください。
Packer 0.8.7からvmware-iso builderでESXiを利用したときに、OVFを作ることができるようになるので、その紹介です。
この機能をマージしてもらえるまでに1年くらいかかってしまい、その間にgovmomiがリリースされているので、いつかgovmomiを使った実装に書き換えたいと思っています。
とても簡単に説明するとvmware-iso
builderにformat
というオプションが追加されるので、template.jsonに"format": "ovf"
と書くとOVFがエクスポートされるようになるというものです。
元々は、作ったVMがunregisterされ、データストアにVMXとVMDKだけ残るという仕様で、後からどうやって使うのかという状態でした。
この記事ではESXiのVagrant boxを作って、それを使ってOVFをビルドする手順になっていますが、ご自宅にESXiが入っているサーバがある方はそれでビルドしてみてください。
ただ、個人的にはESXiのVagrant boxを作っておくとノートPCの上などで手軽にESXiで遊べるのでおすすめです。
以下、環境とビルドの方法です。
環境
- Host OS: Ubuntu 14.04
- VMware Workstation 11.1.3
- Fusionでもいいはずです。
- Packer 0.8.7.dev (77d9a89d1b3eef84a64edf7ca18b49c3ae5847c7)
- まだ0.8.7がリリースされていないので、masterブランチからビルドしてください。
- ESXi 6.0 u1 3029758
- my vmware から
VMware-VMvisor-Installer-6.0.0.update01-3029758.x86_64.iso
をダウンロードしてください。
- my vmware から
- Vagrant 1.7.4
- 公式ページからダウンロードしてインストールしてください。
- vagrant-vmware-workstation 3.2.6
- 有償なのでVMware providerのページから購入してインストールしてください。。。
- vagrant-esxi 0.0.1
vagrant plugin install vagrant-esxi
- ESXiのVagrant boxを使うために入れます。
- vagrant-triggers 0.5.2
vagrant plugin install vagrant-triggers
vagrant up
でpacker build
まで走るようにするために入れます。
- ovftool 4.1.0
- VMwareのページからダウンロードしてインストールしてください。
ESXiのVagrant boxの作成
dougm/packer-esxiをフォークした、higebu/packer-esxiを使って作ります。
VMwareの@dougmさんのリポジトリは古くていろいろと躓くので、フォークして修正したものを使います。
まず、リポジトリをcloneしてesxi60
ブランチをチェックアウトします。
git clone https://github.com/dougm/packer-esxi.git
git checkout esxi60
ビルドします。
packer build template.json
できあがったboxをインポートします。
vagrant box add --name esxi vmware_esxi60.box
これで、ESXiをvagrant up
で起動できるようになります。
VagrantでESXiを起動してPackerでOVFをビルド
では、上記で作成したESXiのboxを使ってOVFをビルドします。
higebu/packer-esxi-exampleをcloneしてから、vagrant up
します。
git clone https://github.com/higebu/packer-esxi-example.git
cd packer-esxi-example
vagrant up
いつものvagrant up
のログの後にpacker build
のログも流れるのが見えると思います。
エラーになってしまった場合、template.jsonの<wait10>
の数が足りないところがあるかもしれません。
中身を見るとわかるのですが、これはVMware社がOSSとして公開している、PhotonのVMをビルドするテンプレートです。 Photonにはkickstartのような仕組みがないため、GUIのインストーラに対してコマンドを流しているからです。
最後に
ポイントは最初にも書きましたが、template.jsonにformat
というオプションを追加することです。
ovf
、ova
、vmx
に対応しています。
Packerはとても便利なのですが、まじめに使っていると機能が足りなかったり動かなかったりすることも多いので、みんなでどんどんプルリクしていきましょう。