- 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.