[chef] Re: Re: Re: Re: How does chef keep state to skip the recipe from running multiple time


Chronological Thread 
  • From: "John E. Vincent (lusis)" < >
  • To:
  • Subject: [chef] Re: Re: Re: Re: How does chef keep state to skip the recipe from running multiple time
  • Date: Sun, 10 Mar 2013 06:41:30 -0400

On Sun, Mar 10, 2013 at 6:06 AM, Todd Michael Bushnell
< >
 wrote:
> Howard,
>
> If indeed you are talking about what Lusis is referring to: a recipe that
> runs one time and removes itself from the run_list, here's a cookbook with
> that functionality:
> http://community.opscode.com/cookbooks/annoyances
>
> The relevant code is in recipes/default.rb:
>
> ruby_block "remove annoyances from run list" do
>   block do
>     node.run_list.remove("recipe[annoyances]")
>   end
>   only_if { node.run_list.include("recipe[annoyances]") }
> end
>
> I actually found myself using similar logic in a bootstrap recipe that I
> recently wrote.  Probably won't use it often, but nice to know about it when
> you do.  Cheers!
>
> :: toddmichael

That's pretty much the exact use case I've used it for in the past.
When you don't have the luxury of a particular action being reliably
idempotent, removing from the run_list is an acceptable middle ground.
In the cases, I've used it, we used it for "first-time" provision
actions where we needed to run something once local only to that node
(in the past case, it was initializing a lucene index or something
iirc) when we first installed the code base. It's not ideal and the
problem really should have been solved upstream by our code but it is
what it is.

For the record, I HIGHLY advise against this in almost every case.
It's really difficult to reason about and you really should figure out
a way to make the operation truly idempotent. Pragmatism wins out
sometimes though ;)

The hilarious part is that I'm RIGHT in the middle of writing a recipe
that will do the exact thing I'm warning against....



Archive powered by MHonArc 2.6.16.

§