knife solo cook hostname
したときに、非情にもCookBook not found
みたいなエラーが出て、site-cookbooks/下の cookbookを認識してくれない場合の対処法です。
結論
knife solo init .
しましょう。
こうすると、カレントディレクトリに.chef/knife.rb
が作られます。
% cat .chef/knife.rb
cookbook_path ["cookbooks", "site-cookbooks"]
node_path "nodes"
role_path "roles"
environment_path "environments"
data_bag_path "data_bags"
# encrypted_data_bag_secret "data_bag_key"
knife[:berkshelf_path] = "cookbooks"
こうなっていればOKです。
どうやって原因をつきとめたのか
対象ホストにsshログインして、
grep -r cookbook_path ~/
すると、
[vagrant@localhost ~]$ grep -r cookbook_path chef-solo
chef-solo/solo.rb:cookbook_path []
chef-solo/solo.rb:cookbook_path << File.join(base, 'cookbooks-1') # /home/DK/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/knife-solo-0.4.1/lib/knife-solo/resources/patch_cookbooks
chef-solo/solo.rb:cookbook_path << File.join(base, 'cookbooks-2') # /home/DK/.berkshelf/knife-solo/ae694eab015e5d3e2be23b6b507eeb69853234bf
chef-solo/solo.rb:cookbook_path << File.join(base, 'cookbooks-3') # /home/DK/tmp/vagrant/chef-monogod-memcached-tt/cookbooks
[vagrant@localhost ~]$ cd chef-solo/
[vagrant@localhost chef-solo]$ ls
cookbooks-1 cookbooks-2 cookbooks-3 dna.json nodes solo.rb
[vagrant@localhost chef-solo]$ cat solo.rb
base = File.expand_path('..', __FILE__)
nodes_path File.join(base, 'nodes')
role_path File.join(base, 'roles')
data_bag_path File.join(base, 'data_bags')
encrypted_data_bag_secret File.join(base, 'data_bag_key')
environment_path File.join(base, 'environments')
environment "_default"
cookbook_path []
cookbook_path << File.join(base, 'cookbooks-1') # /home/DK/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/knife-solo-0.4.1/lib/knife-solo/resources/patch_cookbooks
cookbook_path << File.join(base, 'cookbooks-2') # /home/DK/.berkshelf/knife-solo/ae694eab015e5d3e2be23b6b507eeb69853234bf
cookbook_path << File.join(base, 'cookbooks-3') # /home/DK/tmp/vagrant/chef-monogod-memcached-tt/cookbooks
てな感じになっておりました。
ここで、
- 何かの設定ファイルのもれで"site-cookbooks"が設定できてないんだろうな
- knifeコマンドって
.chef/knife.rb
と関係あるよな - .chef/knife.rbってどこにあるんだっけ?あれ、ない。
- いつ生成されるんだっけ?
と思い至り、原因究明することができました。