背景
以前は3rd partyのVagrant Boxと一緒にAnsibleのplaybookを同梱して、開発環境を構築/配布していた。
しかし、プロビジョニングする物が増えてきたため、初回構築時のプロビジョニング時間が馬鹿にならなくなってきた。
時間節約のために、プロビジョニング済みのBoxをS3にUPして配布してしまうのが楽だろうと判断した。
※Ansibleのplaybookは変わらず同梱する。
問題
S3にアップロードしたBoxのURLをVagrantfile
にそのまま記載しただけだと、Boxのバージョニングが行えない。
どうすっかなー。とりあえず公式ドキュメントを漁る。
https://www.vagrantup.com/docs/boxes/format.html
ここのBox Metadata
が正にそれ。
どうやったか
Vagrantfile
Vagrantfileはこんな感じでS3にUPしたJSONファイルを指定しておく。
config.vm.box = "local-development"
config.vm.box_url = "https://s3-ap-northeast-1.amazonaws.com/local-development/box.json"
config.vm.box_check_update = true
この時、box_check_update
をtrueにしておくと、新しくBoxをS3にUPした際、勝手にアップデートが始まるのでおすすめ。
S3
Vagrantfileが参照する、JSONファイルはこんな感じ。
BoxもS3のバケットの中に入れておく。
{
"description": "Centos7 x86_64",
"short_description": "CentOS7",
"name": "local-development",
"versions": [{
"version": "1.0.0",
"status": "active",
"description_html": "<p>CentOS7 x86_64</p>",
"description_markdown": "CentOS7 x86_64",
"providers": [{
"name": "virtualbox",
"url": "https:\/\/s3-ap-northeast-1.amazonaws.com\/local-development\/box-1.0.0.box"
}]
}]
}
BoxのバージョンをUPする際は、version
とurl
を変えてやれば良い。
これでくそ長いプロビジョニングに付き合わせることなく、Boxのバージョニングもよろしくやれて楽チンダネー。