- From: Lamont Granquist <
>
- To:
- Cc: Christine Draper <
>
- Subject: [chef] Re: Re: Re: Re: How to override node attribute with lazy value?
- Date: Fri, 03 Oct 2014 08:02:45 -0700
Just move that into a computation in recipe code that is stored in a
variable and not in a node attribute:
in default.rb:
ssl_certificate = node["chef-server"]["configuration"]["nginx"][
"ssl_certificate"] ||=
"/etc/pki/tls/certs/%{node["fqdn"]}.pem"
then don't set that attribute in the attribute file, leave it only as a
hook for someone to override the computation with.
See
https://github.com/lamont-granquist/erlang_one for an example
cookbook I wrote last night, with tests showing that you can wrap the
cookbook the way that people want to. Works without computed attributes
directly in the attributes file, it exposes the kind of behavior so that
what the recipe does is computed from the input attributes. Since it
uses a ruby variable instead of setting node attributes in recipe code
there's no attribute precedence issues.
On Fri Oct 3 07:21:32 2014, Christine Draper wrote:
Greg,
Using Noah's approach, you'd have something like this in your
attribute file, to establish the pattern for the derived attribute:
node["chef-server"]["configuration"]["nginx"][ "ssl_certificate"] =
"/etc/pki/tls/certs/%{fqdn}.pem" }
And then this in your recipe where actually wanted to realize the value:
node["chef-server"]["configuration"]["nginx"][ "ssl_certificate"] % {
fqdn : node[:fqdn] }
Hope this helps.
Christine
"/etc/pki/tls/certs/#{node[:fqdn]}.pem" }
On Thu, Oct 2, 2014 at 11:18 AM, Greg Barker
<
<mailto:
>>
wrote:
Thanks Noah. I tried it out but I don't think I'm doing it right.
node["chef-server"]["configuration"]["nginx"] % { ssl_certificate:
"/etc/pki/tls/certs/#{node[:fqdn]}.pem" }
This resulted in:
NoMethodError - undefined method `%' for nil:NilClass
So before that line I added:
node.default["chef-server"]["configuration"]["nginx"] = {}
But now I get the error:
NoMethodError - Undefined node attribute or method `%' on `node'
Any ideas?
On Thu, Oct 2, 2014 at 7:55 AM, Noah Kantrowitz
<
<mailto:
>>
wrote:
On Oct 2, 2014, at 3:13 AM, Greg Barker
<
<mailto:
>>
wrote:
> The chef-server readme shows how to override nginx
attributes. However, it doesn't seem to work like I want it to
when I do:
>
>
node.override["chef-server"]["configuration"]["nginx"]["ssl_certificate"]
= "/etc/pki/tls/certs/#{node[:fqdn]}.pem"
>
> node[:fqdn] is being updated during my chef run using the
hostname cookbook, and so using the above results in an error
because chef-server ends up looking for
/etc/pki/tls/certs/localhost.pem (the old hostname), when it
should instead be using
/etc/pki/tls/certs/mynode.mycompany.com.pem.
>
> So I think I want something like the following, but this
doesn't work. What's the right way to do it?
>
>
node.override["chef-server"]["configuration"]["nginx"]["ssl_certificate"]
= lazy { "/etc/pki/tls/certs/#{node[:fqdn]}.pem" }
lazy{} is a feature of resources, not of node attributes. See
https://coderanger.net/derived-attributes/ for more
information about how to handle delayed interpolation in node
attributes.
--Noah
- [chef] How to override node attribute with lazy value?, Greg Barker, 10/02/2014
- [chef] Re: How to override node attribute with lazy value?, Noah Kantrowitz, 10/02/2014
- [chef] Re: Re: How to override node attribute with lazy value?, Greg Barker, 10/02/2014
- [chef] Re: Re: Re: How to override node attribute with lazy value?, Christine Draper, 10/03/2014
- [chef] Re: Re: Re: Re: How to override node attribute with lazy value?, Lamont Granquist, 10/03/2014
- [chef] Re: Re: Re: Re: Re: How to override node attribute with lazy value?, Greg Barker, 10/03/2014
- [chef] Re: Re: Re: Re: Re: Re: How to override node attribute with lazy value?, Lamont Granquist, 10/03/2014
- [chef] Re: Re: Re: Re: Re: Re: How to override node attribute with lazy value?, Lamont Granquist, 10/04/2014
- [chef] Re: Re: Re: Re: Re: Re: How to override node attribute with lazy value?, Greg Barker, 10/09/2014
- [chef] Re: Re: Re: Re: Re: Re: How to override node attribute with lazy value?, Lamont Granquist, 10/09/2014
- [chef] Re: How to override node attribute with lazy value?, Mathieu Martin, 10/11/2014
- [chef] Re: Re: How to override node attribute with lazy value?, Tensibai Zhaoying, 10/11/2014
Archive powered by MHonArc 2.6.16.