I'v only been using chef for a few hours, and the learning curve seemed really easy until...
I'm trying to right a recipe that installs several software packages on an Ubuntu 12.04 virtual machine. The first thing it needs to do is install Oracle JDK 7. I decided to try to use the java cookbook in the Chef Supermarket. after looking at the documentation, I added a base role to my cookbook that looks like this (base.rb):
name "java"
description "Install Oracle Java on Ubuntu"
override_attributes(
"java" => {
"jdk_version" => '7'
"install_flavor" => "oracle"
"oracle" => {
"accept_oracle_download_terms" => true
}
}
)
run_list(
"recipe[java]"
)
I expected the run list to execute the java::default recipe when chef_zero ran mine. That didn't happen. I added the following line to my recipe, the only thing in my default.rb at the moment:
include_recipe "java"
That got me a little farther. I'm now getting the following output when I vagrant up:
==> default: 27: include_recipe "java::set_attributes_from_version"
==> default: 28: include_recipe "java::#{node['java']['install_flavor']}"
==> default: 29:
==> default:
==> default: [2015-06-28T11:27:27-07:00] ERROR: Running exception handlers
==> default: [2015-06-28T11:27:27-07:00] ERROR: Exception handlers complete
==> default: [2015-06-28T11:27:27-07:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
==> default: [2015-06-28T11:27:27-07:00] ERROR: undefined method `[]' for nil:NilClass
==> default: [2015-06-28T11:27:28-07:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
chef-stacktrace.out points to line 21 of java::default.rb
First and foremost, what am I missing? Something isn't getting defined, but I can't tell what it is, or where to define it.
The second question is what is the run_list for in a role, and when does it get processed? What kicks it off?
Thanks in advance for straightening me out.
Regards,
Kurt