事象
- knife solo initコマンドでrepositoryを作成後、opscode-cookbookからnginx,mysql,databaseなどのcookbookをberkshelfコマンドでinstall。
- また、自作cookbookをknife cookbook createコマンドで作成。
- 自作cookbookのrecipeを書いた後、vagrant upすると、自作cookbookが見つからない旨のerrorが発生。
- error内容を確認すると、vagrant up時に、brrkshelfコマンドが実行され、Berksfileに記載されたcookbooksが~/.berkshelf/default/vagrant/berkshelf-***-default以下に作成され、chef soloコマンドにて仮想環境に転送されるよう。しかし、このberkshelf-***-default以下に、自作cookbookは作成されず、結果errorとなっている模様。
- ちなみに、下記のopscode-cookbookのchef-repoをcloneした場合も、knife solo initの場合と同様に、errorになることを確認した。
git clone https://github.com/opscode/chef-repo.git
コード
原因
- 不明
対応
- Berkfsfileを_Berksfileにrename後、vagrant up実行すると正常に処理完了した。
berkshelfコマンドの実行を抑制する事で、上述の事象は発生しなくなった。
しかし、利用はよくわからない。 - このままだと気持ち悪いので、Berkshelfコマンドを用いたrepository作成を試したところ、vagrant upの正常実行を確認できた。
https://github.com/snumano/vagrant-berkshelf
まとめ
- Berkshelfコマンドでrepository作成した場合、knife solo initした場合と比較して、ファイル構成とVagrantfileの設定内容が異なる事は確認できたが、どの部分が今回の動作の違いになっているのかは、今のところ不明。
- 本事象の原因と根本対策について、どなたか教えていただけたら幸いです。
(2013/7/23追記:Berksfileに自作cookbookをpath optionとともに追記することで、本事象を回避できることを確認しました。後日blogにまとめます) - berks cookbokコマンドは、cookbook = repositoryとして扱うようです。上述のサンプルコードでは、repository名であるchef-repoがそのままcookbook名になっているので、少しかっこ悪い。。。
最後に、入門Chef Soloは何回も読み返して参考にさせていただきました。