[chef-dev] Re: Re: Re: Re: Re: ::File notation


Chronological Thread 
  • From: Andrea Campi < >
  • To: Scott Sanders < >
  • Cc: Akzhan Abdulin < >, Noah Kantrowitz < >, Mike < >, Avishai Ish-Shalom < >, Chef Dev < >
  • Subject: [chef-dev] Re: Re: Re: Re: Re: ::File notation
  • Date: Tue, 16 Apr 2013 22:45:52 +0200

Right, that's what I was thinking too. So in theory the recipe linked by the OP shouldn't fail.
But I've seen this pattern used again and again, to the point where I use it without even thinking.


On Tue, Apr 16, 2013 at 10:40 PM, Scott Sanders < " target="_blank"> > wrote:
I believe this affects resources and providers, not recipes.

% grep -r 'class File ' *
chef/provider/file.rb:    class File < Chef::Provider
chef/resource/file.rb:    class File < Chef::Resource


Scott Sanders  |  Tech Operations  |  803.767.0060  |  @scott_sanders
taximagic : http://taximagic.com  |  sedanmagic : http://sedanmagic.com


BTW, I was writing my thoughts on this and fired up chef-shell to try it.
And guess what, this works like a charm in recipe_mode without any ::

chef:recipe > file "test" do
chef:recipe >     not_if { File.exists?("test") }
chef:recipe ?>  end

Are we even sure this is still a problem or are we cargo-culting something that is in the past?!




On Tue, Apr 16, 2013 at 8:31 PM, Akzhan Abdulin < " target="_blank"> > wrote:
Noah, I suppose that it MUST be a choice of core team. This is a missed usability issue.


2013/4/16 Noah Kantrowitz < " target="_blank"> >
Make a patch and open a ticket and I'm sure btm and crew will be glad to take a look :) It might need to wait for a major release since it would be a backwards-incompatible change, but this would only affect people subclassing the file resource I think, which should be somewhat rare so maybe we can just put out a warning.

--Noah

On Apr 16, 2013, at 11:25 AM, Akzhan Abdulin wrote:

> Mike, take a note that recipe authors aren't ruby pro's (more administrators than programmers). So we need to keep recipe syntax as simple as can.
>
> File.exists? phrase is more intuitive than ::File.exists? one. No namespace collision issue in mind.
>
>
>
> 2013/4/16 Mike < " target="_blank"> >
> So we're back to me not understanding the problem that Akzhan is stating.
>
> On Tue, Apr 16, 2013 at 1:51 PM, Noah Kantrowitz < " target="_blank"> > wrote:
> > Yep, the issue is that recipe code is executed in the Chef::Recipe namespace, so "File" gets you Chef::File. Not sure there is a workaround given Ruby's structure for name lookups.
> >
> > --Noah
> >
> > On Apr 16, 2013, at 10:18 AM, Mike wrote:
> >
> >> I don't understand.
> >>
> >> By using ::File, aren't you guaranteeing that you're using the root namespace?
> >>
> >> On Tue, Apr 16, 2013 at 12:56 PM, Akzhan Abdulin
> >> < " target="_blank"> > wrote:
> >>> Hello Chiefs,
> >>>
> >>> I have insight, - Chef classes should never be named as system ones.
> >>>
> >>> We need to eliminate ::File and so on notation.
> >>>
> >>> Yours sincerely,
> >>>  Akzhan.
> >>>
> >>>
> >>> 2013/4/16 Avishai Ish-Shalom < " target="_blank"> >
> >>>>
> >>>> inline_recipe "test" do
> >>>>
> >>>>     block do
> >>>>             log "testing resource group"
> >>>>
> >>>>             file "/tmp/test1" do
> >>>>
> >>>>                     mode "0600"
> >>>>
> >>>>             end
> >>>>     end
> >>>>     action :nothing
> >>>>
> >>>>     notifies :write, "log[test]"
> >>>>
> >>>>  only_if { ::File.exists? "/tmp/test2" }
> >>>>
> >>>> end
> >>>>
> >>>>
> >>>>
> >>>> https://github.com/avishai-ish-shalom/chef-inline-recipe/blob/master/recipes/default.rb
> >>>>
> >>>>
> >>>
> >
>








Archive powered by MHonArc 2.6.16.

§