I am trying to create a chef recipe which depends on tomcat
cookbook such as
tomcat_user = node[:tomcat][:user]
tomcat_user_home_folder = node[:etc][:passwd][tomcat_user][:dir]
execute "Install jasper license" do
command "cp jasperserver.license #{tomcat_user_home_folder}/"
cwd "#{node["install-jasper-license"]["license-location"]}"
end
When I run sudo chef-client
on a node, I get the following error:
================================================================================
Recipe Compile Error in /var/chef/cache/cookbooks/install-jasper-license/recipes/default.rb
================================================================================
NoMethodError
-------------
undefined method `[]' for nil:NilClass
In my opinion this recipe is unable to find node[:etc][:passwd][tomcat_user]
. A tomcat user will be installed when tomcat recipe runs. I have also added depends 'tomcat'
in metadata.rb of this cookbook. My intent here is to install a file at the home location of the user running tomcat. How do I go about it?
The source of your issue is that the tomcat user is created after you read the value for it which would be set by OHAI.
To solve this issue, you have to perform 2 steps:
node["etc"]
) is only updated once during one of the first phases of a Chef run.You could refactor your code similar to this:
The
ruby_block
ensures that you read the data only during conversion phase after the OHAI data was updated.