[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" みたいなフレームワーク作らないかなー。
カテゴリ:
Vagrant