まとめ
- Chefでknife solo cookしたときに下記エラーが出た
- NoMethodError undefined method `[]' for nil:NilClass
- 原因は未定義のattributeを呼び出してたからだった(typo)
エラー内容
================================================================================
Recipe Compile Error in /home/vagrant/chef-solo/cookbooks-3/ruby-env/recipes/default.rb
================================================================================
NoMethodError
-------------
undefined method `[]' for nil:NilClass
Cookbook Trace:
---------------
/home/vagrant/chef-solo/cookbooks-3/ruby-env/recipes/default.rb:24:in `block in from_file'
/home/vagrant/chef-solo/cookbooks-3/ruby-env/recipes/default.rb:23:in `from_file'
Relevant File Content:
----------------------
/home/vagrant/chef-solo/cookbooks-3/ruby-env/recipes/default.rb:
17: mode 0644
18: owner node['ruby-env']['user']
19: group node['ruby-env']['group']
20: not_if "grep rbenv ~/.bash_profile", :environment => { :'HOME' => "/home/#{node['ruby-env']['user']}"}
21: end
22:
23: directory "/home/#{node['ruby-env']['user']}/.rbenv/plugins" do
24>> owner node['rbenv-env']['user']
25: group node['rbenv-env']['group']
26: mode 0755
27: action :create
28: end
29:
30: git "/home/#{node['ruby-env']['user']}/.rbenv/plugins/ruby-build" do
31: repository node['ruby-env']['ruby-build_url']
32: action :sync
33: user node['ruby-env']['user']
原因
attributes/default.rtを下記のように書いてたんだけどdefault['ruby-env']['user'] = "vagrant" default['ruby-env']['group'] = "vagrant" default['ruby-env']['version'] = "2.1.1" default['ruby-env']['rbenv_url'] = "https://github.com/sstephenson/rbenv" default['ruby-env']['ruby-build_url'] = "https://github.com/sstephenson/ruby-build"
呼び出し箇所はこうなってた
owner node['rbenv-env']['user'] group node['rbenv-env']['group']
対応
呼び出し部分を正しく書き換えて('ruby-env'に)完了そりゃエラーするわなって感じだけどもう少しわかりやすいエラーメッセージだと助かるな〜。
typoに気づけず5分悩んだ。