基本的に、Chefのリポジトリ一式をバージョン管理していると、どうしてもCookbookのディレクトリとかに".git"とか".svn"とか入ってきますよね。(gitとSubversionはどっちでもいいけど)
".git"とか".svn"のディレクトリが、Chefリポジトリ内のfilesディレクトリの中に入ることで、ノードに".git"とか".svn"が一緒に配信(配置)されちゃいますし、web-uiとかでCookbookを参照しようとすると、エライ感じの画面表示になってしまいますw
ということで、Cookbookのアップロード時には、これらの".git"とか".svn"は含めないようにしたいところだが、そのようなオプションが存在しないみたいだ。そのうちCookbookのアップロード時に除外対象のオプションが付きそうな気もしますが、とりあえず的な対応くらいなら、簡単に直せそうだったので、以下の2ファイルをオレオレ改修してみました(パッチをあてました)。差分は以下です。
./chef/lib/chef/config.rb
$ diff -c config.rb config.rb.orig *** config.rb 2011-02-15 23:01:04.900965364 +0900 --- config.rb.orig 2011-02-15 22:49:03.336965586 +0900 *************** *** 236,241 **** # valid user and group name user_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ] group_valid_regex [ /^([-a-zA-Z0-9_.]+)$/, /^\d+$/ ] - cookbook_ignore_regex [ /.*\.git/ , /.*\.svn/ ] end end --- 236,240 ----
./chef/lib/chef/cookbook_loader.rb
$ diff -c cookbook_loader.rb cookbook_loader.rb.orig *** cookbook_loader.rb 2011-02-15 23:04:00.560967102 +0900 --- cookbook_loader.rb.orig 2011-02-15 23:02:39.676965587 +0900 *************** *** 58,64 **** } end ignore_regexes = load_ignore_file(File.join(cookbook, "ignore")) - @ignore_regexes[cookbook_name].concat(Chef::Config.cookbook_ignore_regex) @ignore_regexes[cookbook_name].concat(ignore_regexes) load_files_unless_basename( --- 58,63 ----
補足
ちなみに、↑のChef(chef-client)のバージョンは0.9.12です。
gemでインストールされるChefは、Ubuntuだと"/var/lib/gems/1.8/gems/chef-0.9.12/"のあたり。CentOSだと"/usr/lib/ruby/gems/1.8/gems/chef-0.9.12/"の辺にインストールされています。
# バージョンアップの際は、このパッチ分を忘れないようにしないとなぁ。