[chef] Re: delayed evaluation?


Chronological Thread 
  • From: Ranjib Dey < >
  • To:
  • Subject: [chef] Re: delayed evaluation?
  • Date: Mon, 16 Dec 2013 21:34:35 -0800

value of content is getting evaluated at compile time. its an attributed value and determined soon as the resource is created. while you are setting the node attribute via a ruby block, which gets evaluated at the compile time. some of the options. Im not sure if both assigning, mutating and then using the attribute is common pattern (or a good pattern at all).

i think if you move the file resource inside a lwrp and then notify that resource, that might work. because in that case the file resource will be created inside the provider's action block (which is evaluated only during the execution phase), hence u'll have the node.foo.bar value as you expected. there are several other ways to do the same trick, but this is the cleanest i can think of ..
cheers
ranjib


On Mon, Dec 16, 2013 at 9:18 PM, John Alberts < " target="_blank"> > 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




Archive powered by MHonArc 2.6.16.

§