[chef] Re: merge hash attribute in chef-client --local-mode


Chronological Thread 
  • From: Daniel DeLeo < >
  • To:
  • Subject: [chef] Re: merge hash attribute in chef-client --local-mode
  • Date: Fri, 22 Aug 2014 07:32:17 -0700



On Friday, August 22, 2014 at 6:38 AM, 

 wrote:

> 
> Hello,
> 
> If i use chef-client --local-mode (11.14.2) with my recipe, where i have
> default hash attribute like a = {"default": "1"} and try use a role with
> override_attributes section where a = {"no-default": "2"} i get result a =
> {"default": "1", "no-default": "2"}.
> 
> I know that if a determine a default attribute in role it will be merge, 
> but i
> think that if i write my attributes in "override_attributes" section that 
> will
> be overriding. What i do wrong? 


The Hashes are deep merged, which means any key in the override attributes 
will win over the exact same key in default attributes, but a key that 
appears in default attributes but not in override attributes will be 
untouched. Deep merge is just a more sophisticated version of the built-in 
`merge` method, so you can play with that in irb or pry to get a feel for how 
it works:

[1] pry(main)> a = {"key1" => "value1", "key2" => "value2" }
=> {"key1"=>"value1", "key2"=>"value2"}
[2] pry(main)> b = { "key2" => "override value 2" }
=> {"key2"=>"override value 2"}
[3] pry(main)> merged = a.merge(b)
=> {"key1"=>"value1", "key2"=>"override value 2"}



-- 
Daniel DeLeo






Archive powered by MHonArc 2.6.16.

§