[chef] Re: Re: Re: Using platform_family in a provider?


Chronological Thread 
  • From: Noah Kantrowitz < >
  • To:
  • Subject: [chef] Re: Re: Re: Using platform_family in a provider?
  • Date: Tue, 24 Dec 2013 21:11:46 -0800

You have to do it in the action block, or rather inside a method of the 
provider class which is what #action creates.

--Noah

On Dec 24, 2013, at 9:10 PM, Christopher Armstrong 
< >
 wrote:

> Hmmm... maybe I need to put it in the library after all?
> 
>  NameError
>        ---------
>        undefined local variable or method `node' for 
> #<Class:0x00000003117670>
> 
> 
>        Cookbook Trace:
>        ---------------
>          /tmp/kitchen/cookbooks/java/providers/alternatives.rb:20:in 
> `class_from_file'
> 
> 
>        Relevant File Content:
>        ----------------------
>        /tmp/kitchen/cookbooks/java/providers/alternatives.rb:
> 
>         13:  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 
> or implied.
>         14:  # See the License for the specific language governing 
> permissions and
>         15:  # limitations under the License.
>         16:
>         17:  require 'chef/mixin/shell_out'
>         18:  include Chef::Mixin::ShellOut
>         19:
>         20>> alternatives_cmd = node['platform_family'] == 'rhel' ? 
> 'alternatives' : 'update-alternatives'
>         21:
>         22:  action :set do
>         23:    if new_resource.bin_cmds
>         24:      new_resource.bin_cmds.each do |cmd|
>         25:
>         26:        bin_path = "/usr/bin/#{cmd}"
>         27:        alt_path = "#{new_resource.java_location}/bin/#{cmd}"
>         28:        priority = new_resource.priority
>         29:
> 
> 
> 
> On Tue, Dec 24, 2013 at 8:34 PM, Christopher Armstrong 
> < >
>  wrote:
> Cool. Thanks Julian!
> 
> 
> On Tue, Dec 24, 2013 at 5:41 PM, Julian C. Dunn 
> < >
>  wrote:
> Hi Chris,
> 
> Providers do have access to the node object, but you must refer to it
> directly e.g. node['platform_family'] . I don't believe the syntactic
> sugar of platform_family? is available.
> 
> In library context you don't have access to the node object, so you
> can either pass it in on object initialization (e.g.
> https://github.com/socrata-cookbooks/java/blob/master/libraries/helpers.rb#L27)
> or passing parameters on method invocation.
> 
> - Julian
> 
> On Tue, Dec 24, 2013 at 2:14 PM, Christopher Armstrong
> < >
>  wrote:
> > Ohai Chefs,
> >
> > I'm doing some Christmas Eve hacking, and I think I'm not approaching
> > something properly.
> >
> > Here is what I'm trying to do:
> > https://github.com/socrata-cookbooks/java/pull/111/files
> >
> > Essentially, I need to conditionalize code in a provider based on the 
> > node's
> > platform_family, but I don't believe I have access to the node objects or
> > methods within a provider. I could pass it in as a parameter, but that 
> > seems
> > clunky - the user of the provider shouldn't care about this detail. It's
> > something I want to abstract.
> >
> > Could someone point me in the right direction? I still get confused about
> > what Chef methods are available in recipes, libraries, providers, etc.
> >
> > Happy Holidays!
> >
> > Chris
> 
> 
> 
> --
> [ Julian C. Dunn 
> < >
>           * Sorry, I'm    ]
> [ WWW: http://www.aquezada.com/staff/julian    * only Web 1.0  ;]
> [ gopher://sdf.org/1/users/keymaker/           * compliant!    ;]
> [ PGP: 91B3 7A9D 683C 7C16 715F 442C 6065 D533 FDC2 05B9       ]
> 
> 

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail




Archive powered by MHonArc 2.6.16.

§