Hey Everyone,
I’m a bit confused on how to get a gem (or other resource) installed on a machine that is a dependency for a Chef Exception Handler.
I’m using the EmailMe example from the wiki to familiarize myself with writing handlers:
http://wiki.opscode.com/display/chef/Exception+and+Report+Handlers
I have the example working if I already have the pony gem installed, but once I try to perform a run on a clean machine, I get:
FATAL: LoadError: no such file to load – pony
After reading the following wiki page, I thought the proper place was to put it above the handler code.
http://wiki.opscode.com/display/chef/Evaluate+and+Run+Resources+at+Compile+Time
However that results in:
FATAL: NoMethodError: chef_handler[MyOrganization::EmailMe] (chef_handler::email_me line 25) had an error: NoMethodError: undefined method `gem_package’ for main:Object
I seem to be caught in a catch-22. The handler is evaluated during the compile stage, but I need to install a gem which doesn’t happen until the execute. How are others doing this with gems or other dependancies not on the system?
I’m using the chef_handler cookbook and pulling the chef handler via the LWRP in a recipe.
Where is the best place to call gem_package? Thanks!
–
Aaron Bento
you can use gem_package during the compile phase:
gem_package "foo" do
action :nothing
end.run_action(:install)
This file does exactly what you are talking about, fwiw:
https://github.com/fujin/chef-minitest/blob/develop/cookbooks/minitest/recipes/default.rb#L19-32
--AJ
On 17 February 2012 15:01, Aaron Bento rkive.lists@gmail.com wrote:
Hey Everyone,
I'm a bit confused on how to get a gem (or other resource) installed on a
machine that is a dependency for a Chef Exception Handler.
I'm using the EmailMe example from the wiki to familiarize myself with
writing handlers:
http://wiki.opscode.com/display/chef/Exception+and+Report+Handlers
I have the example working if I already have the pony gem installed, but
once I try to perform a run on a clean machine, I get:
FATAL: LoadError: no such file to load -- pony
After reading the following wiki page, I thought the proper place was to put
it above the handler code.
http://wiki.opscode.com/display/chef/Evaluate+and+Run+Resources+at+Compile+Time
However that results in:
FATAL: NoMethodError: chef_handler[MyOrganization::EmailMe]
(chef_handler::email_me line 25) had an error: NoMethodError: undefined
method `gem_package' for main:Object
I seem to be caught in a catch-22. The handler is evaluated during the
compile stage, but I need to install a gem which doesn't happen until the
execute. How are others doing this with gems or other dependancies not on
the system?
I'm using the chef_handler cookbook and pulling the chef handler via the
LWRP in a recipe.
Where is the best place to call gem_package? Thanks!
--
Aaron Bento
AJ,
Thanks for your pointers. I had the gem_package in there, but the wrong location. It was in the handler code file. I now have a working setup by making these two changes:
- Call the gem_package resource in the recipe.
- Insert gem "pony" at the top of my handler code.
Thanks again!
--
Aaron Bento
On Thursday, February 16, 2012 at 6:09 PM, AJ Christensen wrote:
you can use gem_package during the compile phase:
gem_package "foo" do
action :nothing
end.run_action(:install)
This file does exactly what you are talking about, fwiw:
https://github.com/fujin/chef-minitest/blob/develop/cookbooks/minitest/recipes/default.rb#L19-32
--AJ
On 17 February 2012 15:01, Aaron Bento <rkive.lists@gmail.com (mailto:rkive.lists@gmail.com)> wrote:
Hey Everyone,
I'm a bit confused on how to get a gem (or other resource) installed on a
machine that is a dependency for a Chef Exception Handler.
I'm using the EmailMe example from the wiki to familiarize myself with
writing handlers:
http://wiki.opscode.com/display/chef/Exception+and+Report+Handlers
I have the example working if I already have the pony gem installed, but
once I try to perform a run on a clean machine, I get:
FATAL: LoadError: no such file to load -- pony
After reading the following wiki page, I thought the proper place was to put
it above the handler code.
http://wiki.opscode.com/display/chef/Evaluate+and+Run+Resources+at+Compile+Time
However that results in:
FATAL: NoMethodError: chef_handler[MyOrganization::EmailMe]
(chef_handler::email_me line 25) had an error: NoMethodError: undefined
method `gem_package' for main:Object
I seem to be caught in a catch-22. The handler is evaluated during the
compile stage, but I need to install a gem which doesn't happen until the
execute. How are others doing this with gems or other dependancies not on
the system?
I'm using the chef_handler cookbook and pulling the chef handler via the
LWRP in a recipe.
Where is the best place to call gem_package? Thanks!
--
Aaron Bento