[chef] Re: delayed evaluation?


Chronological Thread 
  • From: Noah Kantrowitz < >
  • To:
  • Subject: [chef] Re: delayed evaluation?
  • Date: Mon, 16 Dec 2013 21:39:09 -0800

The more generic solution is to use resources/LWRPs such that the second 
resource isn't compiled until after the settings you care about. For example 
https://github.com/balanced-cookbooks/ci/blob/master/libraries/ci_server.rb#L45-L46

--Noah

On Dec 16, 2013, at 9:18 PM, John Alberts 
< >
 wrote:

> This seems like such a simple problem and something that everyone should 
> come across at one point or another.
> 
> Here's a short snippet of code that illustrates the issue I'm having:
> 
> (1..2).each do |count|
>   ruby_block "ls /tmp" do
>     block do
>       node.set['test1']['lsdir'] = %x[ls /tmp]
>     end
>   end
> 
>   file "/tmp/file#{count}.txt" do
>     content node['test1']['lsdir']
>   end
> end
> 
> 
> So, at the end of the run, both /tmp/file1.txt and /tmp/file2.txt are 
> empty.  I had hoped for /tmp/file2.txt to show that '/tmp/file1.txt now 
> exists.
> 
> I know this is because the value of attributes are evaluated during the 
> compile phase at the beginning of the chef run and at that time, the value 
> of node['test1']['lsdir'] is nil.  Also, this same issue arises when trying 
> to use a variable instead of an attribute.
> 
> How can I get something like this to execute as I would have hoped?  This 
> has to be a common pattern; set an attribute, use it, modify the attribute, 
> use the new value.  I know there is the new 'lazy' delayed evaluator, but I 
> can only get that to work when used in a value for a resource attribute.
> 
> Thanks
> 
> 
> -- 
> John Alberts

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail




Archive powered by MHonArc 2.6.16.

§