- From: John Alberts <
>
- To:
- Subject: [chef] delayed evaluation?
- Date: Mon, 16 Dec 2013 21:18:30 -0800
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
- [chef] delayed evaluation?, John Alberts, 12/16/2013
Archive powered by MHonArc 2.6.16.