Vagrantのベースボックス更新をするスクリプト
はじめに
最近、仕事でVagrantを使って仮想環境を構築して使うことが多いです。
たいていの場合、最初にここからベースボックスを取得して、パッチ更新、各種ミドルウェアのインストールなどをしてメンバーに配布します。
開発を進める中で、ボックスの内容が大きく変わったときや、プロビジョニングに時間がかかるようになってきたら、vagrant package
でボックスを更新して再配布してます。
再配布時にはvagrant destroy
-> vagrant box remove
-> vagrant box add
という手順でやっていたのですが、オプションを眺めていたらvagrant box add --clean --force
でvagrant box remove
とvagrant box add
同等ということを知りました。
わかったついでに、黒い画面が苦手な人にも配布したりするので、できればコマンド一発にしたいと思ってシェルスクリプトにしてみました。
ファイル名固定だったり、destroy前に確認してなかったり、改善余地はありますが使えるはず。
json使う方法も検討したけど、バージョニングするほどでもないなってことで見送りました。
使い方
配布したVagrantfileとpackage.boxと同じディレクトリに置いて実行。
私のチームではVagrantfileと一緒にコミットしてます。
コード
#!/bin/sh if [ ! -e ./Vagrantfile -o ! -e ./package.box ]; then echo "not found ./Vagrantfile or ./package.box" exit fi BOX=`sed -n 's/^.*config.vm.box.*=.*"\(.*\)"/\1/p' ./Vagrantfile` if [ -z ${BOX} ]; then echo "not found config.vm.box parameter in ./Vagrantfile" exit fi echo "##### ${BOX} setup start\n" echo "##### vagrant destroy\n" vagrant destroy -f echo "##### vagrant box add ${BOX}\n" vagrant box add -c -f ${BOX} ./package.box echo "##### ${BOX} setup end\n"