Awesome guys. Thanks! I went with the "lazy" method because it's less
syntax but tried them both out and they both work.
Cassiano, I wondered the same thing. They looked the same. Almost as if
"lazy" was just an alias for the helper. From what I can see:
- Helper is much more powerful. Especially the way it can take
arguments. I think the fact that it will allow you to use cookbook library
modules is also unique.
- Helpers are limited to template resources whereas lazy can be used
anywhere
Other then that they are very similar and I'll be share some code.
It did prompt me to learn about "Lazy evaluation"
Lazy evaluation - Wikipedia which I didn't know about
before so thanks for that
Here's what I ended up with which worked perfectly:
template "/etc/security/access.conf" do
source "access.conf.erb"
mode 0440
owner "root"
variables(
:access_groups => lazy { node['authorization']['access']['groups'] },
:access_users => lazy { node['authorization']['access']['users'] }
)
action :nothing
end
This resource exists purely to notify the above resource to run near the
end of the chef run
execute "true" do
notifies :create, 'template[/etc/security/access.conf]', :delayed
end
Thanks again !!
MG
On Thu, Oct 17, 2013 at 1:22 PM, Cassiano Leal cassianoleal@gmail.comwrote:
This is interesting. What would be the difference between the two methods
(lazy vs helper)?
--
Cassiano Leal
http://cassianoleal.com
http://twitter.com/cassianoleal
On Thursday, October 17, 2013 at 14:08, Daniel DeLeo wrote:
On Wednesday, October 16, 2013 at 5:37 PM, Cassiano Leal wrote:
I believe this
Chef Infra Client Release Notes is
what you’re looking for.
On Wednesday, October 16, 2013 at 21:16, Michael Glenney wrote:
I noticed when I pass attributes to a template resource via the
'variables' attribute the attributes values are what they are at converge
time. So if I modify those attributes during the chef run, before the
template resource get's called, it doesn't matter. They get rendered as
they were at converge time.
The only way around this I've found is to NOT pass the attributes via the
'variables' attribute and instead source them directly in the template. I
don't like doing that. I like having everything that's being passed to the
template defined in the recipe for documentation purposes.
Is there any way around this? The attribute is correct in memory at the
time the template resource is called. Is there any way to tell it to use
the attribute in memory instead of how it was at converge time? Or am I
stuck calling them from within the template?
MG
You can also use template helpers to keep your logic separate from your
templates:
template Resource
--
Daniel DeLeo