[chef] Re: Re: Re: Re: Re: Re: Re: Re: Re: Force recipe to run at the end


Chronological Thread 
  • From: "steve ." < >
  • To:
  • Subject: [chef] Re: Re: Re: Re: Re: Re: Re: Re: Re: Force recipe to run at the end
  • Date: Sun, 7 Oct 2012 01:46:57 -0700

I had this crazy idea once for a node to drop itself from an external
load balancer device (which shall remain nameless) and re-add it at
the end of a successful Chef run.  Ended up implementing it as an
*event handler* -- ran the "disable myself and let connections drop to
zero" code at init (this was before the start handler hook, sorry) and
ran the "add myself back to the pool" code as event handler code.

I think it would have worked, except I apparently accidentally
overlooked the fact that the load balancer API endpoint wasn't
accessible from the Chef node.  DOH.

An approach like this might work for your situation, though -- you
have full access to the node object in the event handler code and
you're guaranteed to be running at the end of the run.  As long as
you're not doing something that could get clobbered by another event
handler, you'd be fine.

This might sound gonzo, but to my eye it's simpler than distributing a
gem.  Might be easier to troubleshoot, too.

Good luck!

On Mon, Oct 1, 2012 at 8:07 PM, Julien Vehent 
< >
 wrote:
> On 2012-10-01 21:39, AJ Christensen wrote:
>>
>> For structured code like this (requires, includes, extends.. code that
>> spreads multiple files..) I'd suggest moving it out to a Ruby Gem and
>> using the chef_gem installation method / compile time access.
>>
>> As Jay mentioned, the libraries are shipped from the server and
>> evaluated as they are received (IIRC) so you can have potential
>> ordering issues there when requiring a file that doesn't exist, or
>> relying on a file to be autoloaded, etc.
>>
>> Here's an additional example:
>>
>http://rubygems.org/gems/flock_of_chefs
>https://github.com/chrisroberts/flock_of_chefs/
>>
>>
>https://github.com/chrisroberts/cookbook-flock_of_chefs/blob/master/recipes/default.rb
>>
>> Cheers,
>>
>> --AJ
>>
>
> Thanks for the explanation, AJ.
> I decided to take a simpler approach and store the exported function in the
> same module as the internal function. It works fine, and does what I want.
> https://github.com/jvehent/AFW/commit/2117d19d64c568985eae5a855c11e42167d2e41e
>
> Cheers,
> Julien
>
>



Archive powered by MHonArc 2.6.16.

§