vagrant + berkshelfを使うときに独自のcookbookをどう使うか

現在、vagrant-berkshlef(ver. 1.2.0)を使うと、cookbooks_pathが乗っ取られるので、もともとそこに指定していた独自のcookbookが見えなくなってしまう。ので、試行錯誤した結果をめも。

方法1 Berksfileでcookbookを管理して、cookbook自体はlocalにinstallして使う

この場合は、vagrant-berkshelfのpluginは使わずに、Vagrantfileで指定したpathにinstallして使う。

# Vagrantfile
     dev.vm.provision :chef_solo do |chef|
       chef.cookbooks_path = [ "share/chef/cookbooks", "share/chef/site-cookbooks" ]

$ ls
Berksfile
$ berks install --path share/chef/cookbooks

方法2 Berksfileにpath:で指定する

Berksfileで、cookbookのsourceとしてローカルのcookbookを指定できるのでそれを使う。(参考:Redirecting…)

# Vagrantfile
    config.berkshelf.enabled = true

# Berksfile
cookbook 'something', path: 'chef/cookbooks/something'

後者の方がcookbookの追加・更新もれないしいいかなと思いつつ必要なcookbookをBerksfileでも全部指定しないと行けないのがいけてなかったり。vagrant-berkshelfの挙動がもう少しよしなになればいいなとも思っていたり。でも、基本本番と同じ構成で開発したいので、ローカルから直接provisionするのは最低限で、各provisioningはリモートでする感じになるのかなぁと。