[chef] lwrp's and libraries broken kung-foo


Chronological Thread 
  • From: andi abes < >
  • To:
  • Subject: [chef] lwrp's and libraries broken kung-foo
  • Date: Tue, 7 Feb 2012 16:04:45 -0500

We recently updated to open chef  10.6 (from 9.8) and my lwrp broke a little.
The goal of the LWRP is to auto discover the presence of utilities on the system, and use the appropriate one. 
The way it was rigged as:
* A library file contains a general purpose class which is to be extended by the utility specific classes
 * The general class implements self.inherited(subclass), and records in a class variable all the extending classes (an array)
 * The provider in its load_current_resource iterates over the collection of available libraries, until one reports it can operate on this system.

This worked nicely in .9.8, but broke in .10.6.  Poking at chef code a bit, it seems that the reason for that is the switch in run_context.rb load_libraries to using Kernel.load() rather than require. (I think). This seems to prevent any common context between the different libraries and providers (??)


To put it it code:

in libraries/d_base.rb:

class BASE:
    @@controller_styles = []

    def self.inherited(subclass)      
      @@controller_styles  << subclass
    end

    def self.controller_styles
      @@controller_styles
    end
end


in libraries/d_a.rb:

class ASTYLE < BASE
  def working()
     return test
  end
end


in providers/a.rb:

def load_current_resource  
   BASE.controller_styles.each { |c| 
       break if c.working()
   }
end


A few questions:

) what triggered the switch from 'require' to Kernel.load()? Is it around better isolation of libraries within the same provider, or across providers?
) anyone else hit something similar?
) is there a way of achieving this in 0.10.6 and beyond?


thanks for any pointers.


  • [chef] lwrp's and libraries broken kung-foo, andi abes, 02/07/2012

Archive powered by MHonArc 2.6.16.

§