2013年7月23日火曜日

vagrant + chef solo環境で、opscode-cookbookと自作cookを混在させたらハマった

表題の通りハマったので忘備録として残しておきます。

事象

  • 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は何回も読み返して参考にさせていただきました。






このエントリーをはてなブックマークに追加