Windows 7 上の Vagrant で Chef-Soloプロビジョニング

Vagrant 0.8.7 で用意されているプロビジョニングの仕組みは、

  • Puppet
  • Chef (solo/client)
  • Shell

の3種類ほど。

chef-solo を使いたかったのだが、Windows 7 ではどうしても失敗してしまう。
(関連:現在の Vagrant の Windows 7 対応状況)
ローカルのディレクトリは、/vagrant でマウントされるので、そこに chef リポジトリを設置しておけば、Shell から chef-solo を呼べるのではないか?と考え試してみた。

以下のファイルを用意。

  • Vagrantfile
  • bin/provision.sh
  • bin/solo.rb
  • bin/node.json
  • chef/cookbooks/[必要なcookbook]

Vagrantfile

Vagrant::Config.run do |config|
  config.vm.provision :shell, :inline => 'sh /vagrant/bin/provision.sh'
end

bin/provision.sh

#!/bin/sh
if [ ! -e /var/chef/cache ]; then
  sudo mkdir -p /var/chef/cache
fi
cd `dirname $0`
sudo chef-solo -c solo.rb -j node.json

bin/solo.rb

cookbook_path ["/vagrant/chef/cookbooks"]

bin/node.json

{"run_list":["必要レシピ",...]}

chef ディレクトリ以下が、chef リポジトリである。ひな型を Github から取得しておく。

 git clone https://github.com/opscode/chef-repo.git chef

chef/cookbooks 以下に必要な cookbook を用意する。

これで、vagrant up すれば、chef-solo がキックされる。