chef-soloでCookbooksディレクトリを複数指定する

実は設定ファイルの中で配列で指定できた。

file_cache_path "/var/chef-solo"
cookbook_path ["/var/chef-solo/cookbooks", "/var/chef-solo/site-cookbooks"]

cookbooksの方には汎用的に使えるCookbookを入れて、site-cookbooksの方にはそのサイト固有の設定を含んだCookbookを入れる。
それぞれ別のリポジトリで管理すれば収まりがいい。

自分の場合Chefでひとつの大規模インフラを管理する、というよりは中小規模のインフラをたくさん作るという使い方をしているので、各インフラごとの固有の設定をどう管理するかというのはちょっと課題だったのだけど、これですっきりできそうだ。
汎用的に使えるようになっているCookbookにサイトごとの固有の設定を含めるとか気持ち悪いしね。

固有の設定をCookbookから分離する手段としてはAttributeを使って、jsonに固有の設定パラメータを書くやり方もある。

ただあんまりAttributeの数が多くなるとレシピが複雑になるし使い方を忘れてしまうので、サイト固有のCookbookをさくっと作ってしまった方がいいんじゃないの、とRubyプログラミングになれている身としては思う。

とはいえiptablesの設定とか単純なパラメータの設定ですむ場合はAttributeを使っている。

参考