Posted at

knife solo cook でsite-cookbooks下のcookbookを認識しない場合の対処法

More than 5 years have passed since last update.

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ってどこにあるんだっけ?あれ、ない。

  • いつ生成されるんだっけ?

と思い至り、原因究明することができました。