@kyanny's blog

My thoughts, my life. Views/opinions are my own.

vagrant package コマンドの --vagrantfile オプションで指定した packaged な Vagrantfile がある場所

~/.vagrant.d/boxes/BOX_NAME 以下にある。

$ tree ~/.vagrant.d/boxes/package.box
/Users/kyanny/.vagrant.d/boxes/package.box
└── 0
    └── virtualbox
        ├── Vagrantfile
        ├── box-disk1.vmdk
        ├── box.ovf
        ├── include
        │   └── _Vagrantfile
        ├── metadata.json
        └── vagrant_private_key
  • package.box はこの場合 box 名
  • この box を使って vagrant up すると Vagrantfile load order に従って ~/.vagrant.d/boxes/package.box/0/virtualbox/Vagrantfile が読み込まれる
  • その Vagrantfile の中でさらに include/_Vagrantfile も読み込まれる
  • この _Vagrantfilevagrant package --vagrantfile オプションで指定した Vagrantfile そのもの

vagrant package - Command-Line Interface - Vagrant Documentation


じゃあなんでそもそも package.box を作るときに --vagrantfile オプションで指定した Vagrantfile も含めることができるのかというと、 box ファイルは Gzipped TAR アーカイブでその中に入っているから。 box ファイルを展開すると ~/.vagrant.d/boxes` にあるのと同じファイル群が出てくる。

$ tar xzvf package.box
x ./box-disk1.vmdk
x ./box.ovf
x ./include/
x ./include/_Vagrantfile
x ./vagrant_private_key
x ./Vagrantfile

$ tree .
.
├── Vagrantfile
├── box-disk1.vmdk
├── box.ovf
├── include
│   └── _Vagrantfile
├── package.box
└── vagrant_private_key