Vagrantのベースボックス更新をするスクリプト

はじめに

最近、仕事でVagrantを使って仮想環境を構築して使うことが多いです。

たいていの場合、最初にここからベースボックスを取得して、パッチ更新、各種ミドルウェアのインストールなどをしてメンバーに配布します。

開発を進める中で、ボックスの内容が大きく変わったときや、プロビジョニングに時間がかかるようになってきたら、vagrant packageでボックスを更新して再配布してます。

再配布時にはvagrant destroy -> vagrant box remove -> vagrant box addという手順でやっていたのですが、オプションを眺めていたらvagrant box add --clean --forcevagrant box removevagrant 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"