読者です 読者をやめる 読者になる 読者になる

YTsudaのブログ

1985生まれ、男。東京で働くWeb制作者

Vagrantで複数のcookbooksを指定する

chefのレシピは自作のものとサードパーティーのものを別のディレクトリに分けて入れることが推奨されています。

knifeでchefのプロジェクトを立ち上げると以下のようなディレクトリ構成になります。 cookbooks がサードパーティの、site-cookbooks が自家製のレシピを入れるディレクトリです。

$ knife solo init chef-repo
$ tree chef-repo/
 chef-repo/
 ├── cookbooks
 ├── data_bags
 ├── nodes
 ├── roles
 ├── site-cookbooks
 └── solo.rb

Vagrantfileの設定

provision時に cookbooksとsite-cookbooks両方のレシピを使用したい場合、 Vagrantfileでその両方を指定して読み込む必要があります。

やり方は以下の通り。 "chef.cookbooks_path"に配列を渡すことで実現できます。 相対パスの起点はVagrantfileのあるディレクトリです。

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["./chef-repo/cookbooks", "./chef-repo/site-cookbooks"]
    chef.add_recipe "apt"         #cookbooksにあるサードパーティーのレシピ
    chef.add_recipe "my-project"  #site-cookbooksにある自作レシピ
  end 
end