- 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:12:30 +1200
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
>
>
- [chef] Re: Deep merge in 0.10.10 and 10.12.0, Michael Glenney, 09/02/2012
- [chef] Re: Re: Deep merge in 0.10.10 and 10.12.0, Adam Jacob, 09/02/2012
- [chef] Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Michael Glenney, 09/02/2012
- [chef] Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, AJ Christensen, 09/02/2012
- [chef] Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Michael Glenney, 09/02/2012
- [chef] Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Michael Glenney, 09/02/2012
- [chef] Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Michael Glenney, 09/04/2012
- [chef] Re: Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Juanje Ojeda Croissier, 09/04/2012
- [chef] Re: Re: Re: Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Juanje Ojeda Croissier, 09/04/2012
- [chef] Re: Re: Re: Re: Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Daniel DeLeo, 09/04/2012
- [chef] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Michael Glenney, 09/04/2012
- [chef] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, AJ Christensen, 09/04/2012
- [chef] Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Deep merge in 0.10.10 and 10.12.0, Michael Glenney, 09/05/2012
Archive powered by MHonArc 2.6.16.