- From: Daniel DeLeo <
- To: Lamont Granquist <
- Cc: Noah Kantrowitz <
>, Chef Dev <
- Subject: [chef-dev] Re: Re: Re: Re: 12.4 DSL in core providers
- Date: Wed, 1 Jul 2015 16:48:00 -0700
On Wednesday, July 1, 2015 at 3:50 PM, Lamont Granquist wrote:
> On 6/29/15 3:30 PM, Noah Kantrowitz wrote:
> > On Jun 29, 2015, at 3:26 PM, Daniel DeLeo
> > <
> > (mailto:
> > wrote:
> > > On Saturday, June 27, 2015 at 12:57 PM, Lamont Granquist wrote:
> > > > On 6/26/15 4:21 PM, Noah Kantrowitz wrote:
> > > > > Throwing this on the mailing list as a reminder since I think I've
> > > > > used up my quota of tickets lately: It would be nice to move
> > > > > towards adding the recipe DSL back to Chef::Provider. Currently
> > > > > there are unpleasant issues when you subclass a non-DSL-using
> > > > > provider and then mix in the DSL module. Several providers have
> > > > > methods with names matching DSL stuffs,
> > > > > (https://github.com/chef/chef/blob/master/lib/chef/provider/git.rb#L324,
> > > > >
> > > > > https://github.com/chef/chef/blob/master/lib/chef/provider/execute.rb#L30)
> > > > > so if you mix in the DSL such that it comes before the superclass
> > > > > in the MRO, stuff goes haywire. If the DSL was pulled in earlier in
> > > > > the MRO, then the "correct" methods would take priority. I can fix
> > > > > this one-off each time it comes up, but being unable to use the DSL
> > > > > when extending core classes is something I would love to see in the
> > > > > future (ex.
> > > > > https://github.com/poise/application_git/blob/master/lib/poise_application_git/resource.rb
> > > > > and
> > > > > https://github.com/poise/poise-ruby/blob/master/lib/poise_ruby/resources/ruby_execute.rb).
> > > > >
> > > > > --Noah
> > > > Yeah, in retrospect we shouldn't have pulled the Recipe DSL and should
> > > > have eliminated method_missing from the Recipe DSL instead. Since
> > > > we're
> > > > going down the road of eliminating method_missing from the Recipe DSL,
> > > > it should probably go back into Chef::Provider.
> > >
> > >
> > > I find having the DSL when I don’t want it pretty annoying actually.
> > > method_missing is really annoying since you get absurd errors for any
> > > typo’d method name, but the DSL also camps on a lot of domain words so
> > > you can also invoke it “correctly” on accident as well.
> > >
> > > Is there a compromise that doesn’t suck, like invoking the DSL only
> > > inside a block or adding just the non-dynamic DSL methods
> > > (#declare_resource and #build_resource) maybe?
> > method_missing is being phased out already and will be gone from the DSL
> > in 13. We could certainly put it back in Provider without method_missing
> > too, since we already burned that compat bridge. Doing in a block is
> > possible (see also the fused #action context stuff in resources already),
> > but I think it would be cleaner to find a solution that keeps "real
> > providers" and LWRPs in parity.
> > --Noah
> Yeah, I'd like to see more parity between LWRPs and core resources.
> However, it is a good point that even without method_missing we'd be
> allowing cookbook LWRPs to inject methods into the namespace of all the
> core providers.
Yep, stuff like this is why I want a compromise, either recipe do; end, or
just #declare_resource/#build_resource or something.
Archive powered by MHonArc 2.6.16.