[Vagrant] Chefを使わずにShellScriptでプロビジョンする

やり方

スクリプト構成
Vagrantfile
setup.sh   ← Vagrantから実行される起点スクリプト
recipes/setup_timezone.sh  ← setup.shから呼ばれるレシピ
recipes/add_user.sh        ← setup.shから呼ばれるレシピ
Vagrantfile
Vagrant.configure("2") do |config|
...
  config.vm.provision "shell"  , path: "setup.sh"
...
end
setup.sh
export SETUP_DIR=/vagrant
cd ${SETUP_DIR}

source attributes.sh

source recipes/setup_timezone.sh
source recipes/add_user.sh
attributes.sh
# レシピ間で共有したい変数を定義

export USER_NAME="userhoge"
recipes/setup_timezone.sh
cp -f /usr/share/zoneinfo/Japan /etc/localtime
recipes/add_user.sh
if [ -e /home/${USER_NAME} ] ; then
   echo "user $USER_NAME already exists"
else
    useradd -m ${USER_NAME}
    echo "added a user"
fi
ざっとこんな感じです。
このあとyum installしたり httpd.confを上書きcpで配置したりします。

冪等性を担保するためには多少工夫は必要ですが、Chefを使ってても"execute"とか"bash"リソースを使う場面は出てくるので、それなら全部ShellScriptで書くという発想もありかもしれないと思いました。
(もちろんチーム開発のときや再利用性を重視する場合はChefを使った方がよいとは思います)

ShellScriptならChefよりも学習コストが低いのですぐ始められるのが利点です。
Chefがとっつきにくいと思っている人は、一度ShellScriptプロビジョンを試してみてはいかがでしょうか?

そのうち誰か "Shef" みたいなフレームワーク作らないかなー。
カテゴリ: