[chef] Re: Re: Re: Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0


Chronological Thread 
  • From: AJ Christensen < >
  • To:
  • Subject: [chef] Re: Re: Re: Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0
  • Date: Wed, 5 Sep 2012 11:13:35 +1200

Conversely, a work-around may be to perform all of your !merge
knockouts in Roles instead of via supplemental node JSON data on the
CLI..

You can easily temporarily allocate a role to a node via supplemental
JSON data (triggering attribute-merge-knockout semantics)

--AJ

On 5 September 2012 11:12, AJ Christensen 
< >
 wrote:
> Is supplemental JSON node data deep-merged to the node? The code I
> posted was re: Roles, not supplemental JSON data loaded via CLI.
>
> https://github.com/opscode/chef/blob/master/chef/lib/chef/application/client.rb#L271
> https://github.com/opscode/chef/blob/master/chef/lib/chef/client.rb#L249-253
> https://github.com/opscode/chef/blob/master/chef/lib/chef/node.rb#L378-388
>
> Ah, and here's the deep merge! Interesting stuff:
> https://github.com/opscode/chef/blob/master/chef/lib/chef/node.rb#L391-396
>
> As you can see, it doesn't use the role_merge, just the standard
> #merge method from the mixin:
> https://github.com/opscode/chef/blob/master/chef/lib/chef/mixin/deep_merge.rb#L31-36
>
> So, it doesn't allow the !merge knockout prefix for JSON node data
> attributes supplied via CLI. Hope this helps. Should be an easy patch.
>
> --AJ
>
> On 5 September 2012 11:02, Michael Glenney 
> < >
>  wrote:
>> Hmm.  You're running 10.12.0?  I just tested again.  Started with the
>> following:
>>
>> Node data (with 'knife node show <nodename> -Fj'):
>>
>>     "haproxy": {
>>       "config": "classroom.cfg.erb",
>>       "nodes": {
>>         "portal_api": [
>>           "2.2.2.2",
>>           "3.3.3.3"
>>         ]
>>       }
>>
>> haproxy config:
>>
>>   server portal_api-2.2.2.2 2.2.2.2:443 check port 443 inter 10s rise 4 
>> fall
>> 4
>>   server portal_api-3.3.3.3 3.3.3.3:443 check port 443 inter 10s rise 4 
>> fall
>> 4
>>
>> I ran 'chef-client -j /etc/chef/routing_rules.json' with the following in
>> "routing_rules.json":
>>
>> { "haproxy": { "nodes": { "portal_api": [ "!merge:", "10.10.10.10",
>> "11.11.11.11" ] } } }
>>
>>
>> This is what I ended up with:
>>
>> Node data:
>>
>>     "haproxy": {
>>       "config": "classroom.cfg.erb",
>>       "nodes": {
>>         "portal_api": [
>>           "2.2.2.2",
>>           "3.3.3.3",
>>           "!merge:",
>>           "10.10.10.10",
>>           "11.11.11.11"
>>         ]
>>       }
>>
>> haproxy config:
>>
>>   server portal_api-2.2.2.2 2.2.2.2:443 check port 443 inter 10s rise 4 
>> fall
>> 4
>>   server portal_api-3.3.3.3 3.3.3.3:443 check port 443 inter 10s rise 4 
>> fall
>> 4
>>
>>   server portal_api-!merge: !merge::443 check port 443 inter 10s rise 4 
>> fall
>> 4
>>   server portal_api-10.10.10.10 10.10.10.10:443 check port 443 inter 10s
>> rise 4 fall 4
>>   server portal_api-11.11.11.11 11.11.11.11:443 check port 443 inter 10s
>> rise 4 fall 4
>>
>> The docs say you can run without the colon now but I'm not seeing a
>> difference.  Doesn't work either way.
>>
>> MG
>>
>>
>> On Tue, Sep 4, 2012 at 3:41 PM, Juanje Ojeda Croissier
>> < >
>>  wrote:
>>>
>>> I believe the issue here is the " (without the colon) ". I had some
>>> troubles here as well, but it's now working with the colon
>>> ("!merge:").
>>>
>>> Could you test it with colon, please?
>>>
>>> On Tue, Sep 4, 2012 at 8:27 PM, Michael Glenney 
>>> < >
>>> wrote:
>>> > I have now verified that putting !merge does not work in 10.12.0  I'll
>>> > go
>>> > back an read over the link AJ sent again but it appears as if deep merge
>>> > is
>>> > gone or broken.
>>> >
>>> > Here's the json I passed to the chef-client run:
>>> >
>>> > { "haproxy": { "nodes": { "portal_api": [ "!merge", "4.4.4.4", "5.5.5.5"
>>> > ] }
>>> > } }
>>> >
>>> > Here's the resulting haproxy config:
>>> >
>>> >   server portal_api-!merge !merge:443 check port 443 inter 10s rise 4
>>> > fall 4
>>> >   server portal_api-4.4.4.4 4.4.4.4:443 check port 443 inter 10s rise 4
>>> > fall
>>> > 4
>>> >   server portal_api-5.5.5.5 5.5.5.5:443 check port 443 inter 10s rise 4
>>> > fall
>>> > 4
>>> >
>>> > Not what I was going for obviously.
>>> >
>>> > MG
>>> >
>>> >
>>> > On Sun, Sep 2, 2012 at 6:46 PM, Michael Glenney 
>>> > < >
>>> > wrote:
>>> >>
>>> >> Yeah.  Looking at your link it looks like using "!merge" (without the
>>> >> colon) will probably work.  just need to test it.  That goes along with
>>> >> what
>>> >> it says in the wiki except for the fact that the wiki says it "can" be
>>> >> used
>>> >> instead of saying it must.
>>> >>
>>> >> MG
>>> >>
>>> >> On Sun, Sep 2, 2012 at 3:11 PM, AJ Christensen 
>>> >> < >
>>> >> wrote:
>>> >>>
>>> >>> From DeepMerge mixin class:
>>> >>>
>>> >>> # Inherited roles use the knockout_prefix array subtraction
>>> >>> functionality
>>> >>> # This is likely to go away in Chef >= 0.11
>>> >>>       def role_merge(first, second)
>>> >>>         first  = Mash.new(first)  unless first.kind_of?(Mash)
>>> >>>         second = Mash.new(second) unless second.kind_of?(Mash)
>>> >>>
>>> >>>         DeepMerge.deep_merge(second, first, {:knockout_prefix =>
>>> >>> "!merge", :preserve_unmergeables => false})
>>> >>>       end
>>> >>>
>>> >>>
>>> >>>
>>> >>> https://github.com/opscode/chef/blob/master/chef/lib/chef/mixin/deep_merge.rb#L44
>>> >>>
>>> >>> Maybe there's something useful for you here.
>>> >>>
>>> >>> I've only once used the attribute knockout functionality -- what is
>>> >>> your use case? There may be another simple solution.
>>> >>>
>>> >>> --AJ
>>> >>>
>>> >>> On 3 September 2012 09:08, Michael Glenney 
>>> >>> < >
>>> >>> wrote:
>>> >>> > Weird. For some reason it's not sending me my own. Oh well.  Have
>>> >>> > there
>>> >>> > been any responses to my question?  Because I dont see any of those
>>> >>> > either
>>> >>> >
>>> >>> > Michael Glenney
>>> >>> > Sent from my iPhone
>>> >>> >
>>> >>> > On Sep 2, 2012, at 11:43 AM, Adam Jacob 
>>> >>> > < >
>>> >>> >  wrote:
>>> >>> >
>>> >>> >> Nope - I saw it two days ago.
>>> >>> >>
>>> >>> >> Adam
>>> >>> >>
>>> >>> >> On Sun, Sep 2, 2012 at 10:04 AM, Michael Glenney
>>> >>> >> < >
>>> >>> >>  wrote:
>>> >>> >>> I sent this on friday. Still hasn't made it to my inbox. Am I
>>> >>> >>> getting
>>> >>> >>> moderated?
>>> >>> >>>
>>> >>> >>> Michael Glenney
>>> >>> >>> Sent from my iPhone
>>> >>> >>>
>>> >>> >>> On Aug 31, 2012, at 4:08 PM, Michael Glenney
>>> >>> >>> < >
>>> >>> >>> wrote:
>>> >>> >>>
>>> >>> >>> I had a problem with deep merge not working properly in 10.12.0.
>>> >>> >>> Tested in
>>> >>> >>> 0.10.10 and it didn't work there either.  Instead of replacing my
>>> >>> >>> array it
>>> >>> >>> was actually putting "!merge:" into my array.
>>> >>> >>>
>>> >>> >>> After I reverted to 0.10.4 to get my deployment completed I
>>> >>> >>> stumbled
>>> >>> >>> on this
>>> >>> >>> line from http://wiki.opscode.com/display/chef/Deep+Merge:
>>> >>> >>>
>>> >>> >>> "!merge (without the colon) can be used in Chef >= 0.10.10"
>>> >>> >>>
>>> >>> >>> I haven't had a chance to go back and test.  Will have to wait
>>> >>> >>> until
>>> >>> >>> Monday.
>>> >>> >>> But should that line read:
>>> >>> >>>
>>> >>> >>> "!merge (without the colon) MUST be used in Chef >= 0.10.10"
>>> >>> >>>
>>> >>> >>> Thanks,
>>> >>> >>>
>>> >>> >>> MG
>>> >>> >>
>>> >>> >>
>>> >>> >>
>>> >>> >> --
>>> >>> >> Opscode, Inc.
>>> >>> >> Adam Jacob, Chief Customer Officer
>>> >>> >> T: (206) 619-7151 E: 
>>> >>> >> 
>>> >>
>>> >>
>>> >
>>>
>>>
>>>
>>> --
>>> Juanje
>>>
>>> http://about.me/juanje
>>
>>



Archive powered by MHonArc 2.6.16.

§