[chef] Re: Re: Re: Overriding attributes


Chronological Thread 
  • From: DV < >
  • To:
  • Subject: [chef] Re: Re: Re: Overriding attributes
  • Date: Fri, 21 Mar 2014 16:11:27 -0700

Thanks Daniel, now it makes a little more sense. I guess it would be
helpful if precedence of attributes could be defined in the JSON files
that are passed to chef-solo so that there's a choice of what happens
to them.

On Wed, Mar 19, 2014 at 8:17 AM, Daniel DeLeo 
< >
 wrote:
> On Tuesday, March 18, 2014 at 11:55 AM, DV wrote:
>> Ran into this issue today so thought I'd revive this thread.
>>
>> I'm using postgresql cookbook with chef-solo and cookbook attributes
>> aren't merged together with attributes set in .json file passed to
>> chef-solo. Instead .json file attributes override those set in
>> cookbook.
>>
>> Here's what's in postgresql/attributes/default.rb:
>> ...
>> default['postgresql']['pg_hba'] = [
>> {:type => 'local', :db => 'all', :user => 'postgres', :addr => nil,
>> :method => 'ident'},
>> {:type => 'local', :db => 'all', :user => 'all', :addr => nil,
>> :method => 'ident'},
>> {:type => 'host', :db => 'all', :user => 'all', :addr =>
>> '127.0.0.1/32', :method => 'md5'},
>> {:type => 'host', :db => 'all', :user => 'all', :addr => '::1/128',
>> :method => 'md5'}
>> ]
>> ...
>>
>> Here's what in my .json file:
>> ...
>> {
>> ...
>> "postgresql": {
>> ...
>> "pg_hba": [
>> { "type": "host", "db": "replication", "user": "postgres",
>> "addr": "10.0.0.0/8", "method": "trust" }
>> ],
>> ...
>> "run_list": [ "recipe[postgresql::server]" ]
>> }
>>
>> Resulting pg_hba.conf has only one line in it:
>>
>> host replication postgres 10.0.0.0/8 trust
>>
>> Since node[:postgresq][:pg_hba] is an array attribute, it should be
>> merged rather than overwritten.
>>
>> The behavior is same with chef-solo 10.28.0 and 11.6.0.
>>
>> I'll go ahead and submit that as a defect unless someone thinks it's
>> intended behavior.
>>
>> On Fri, Jun 28, 2013 at 1:55 AM, Jeffrey Jones 
>> <
>>  
>> (mailto: )>
>>  wrote:
>> > Hello all
>> >
>> > I have a list of default users I would like for my DB and am attempting 
>> > to
>> > combine them with ones set in an attribute.json file used by chef solo. 
>> > The
>> > relevant code is below
>> >
>> > https://gist.github.com/rurounijones/5883385
>> >
>> > If there is nothing set in the json file then it write the 3 default 
>> > values
>> > to pg_hba.conf
>> >
>> > However if there are values set in the json then ONLY the values in the
>> > .json file are used. They are not merged in with the default_db_users
>> > despite my setting of them (I tried everything up to force_override 
>> > which,
>> > as far as I see it, should take precedence),
>> >
>> > Am I missing something here?
>> >
>> > Cheers
>> >
>> > Jeff
>>
>>
>>
>> --
>> Best regards, Dmitriy V.
>
>
> Arrays are difficult to get right, because the behavior you want totally 
> depends on what your use case is. For example, you might use an array to 
> specify a list of ports that a server should bind to. So your cookbook 
> might specify, say, port 80 and 443 for an HTTP server. If arrays merged in 
> a purely additive way, then you would not be able to specify that the 
> server should listen only on, say, 8000 and 8443.
>
> Chef attempts to reach a compromise by merging arrays within precedence 
> levels, that is, default attributes regardless of source (environment, 
> role, cookbook) are merged, as are override attributes from those sources. 
> Arrays are replaced between different precedence levels, however, so when 
> you use `-j SOME_JSON`, these become “normal” level attributes, where 
> arrays will replace anything set at the “default” level (which is what 
> cookbooks typically do).
>
> Your best bet is to work with the cookbook maintainer to come up with a 
> non-array-based attributes API, which will behave the way you want.
>
> --
> Daniel DeLeo
>
>
>



-- 
Best regards, Dmitriy V.



Archive powered by MHonArc 2.6.16.

§