Using class methods from libraries in a recipe

chef-infra

Solution

You do not have access to the Chef Recipe DSL inside libraries. The DSL methods are actually just shortcuts to full-blown Ruby classes. For example:

template '/etc/foo.txt' do
  source 'foo.erb'
end

Actually "compiles" (read: "is interpreted") to:

template = Chef::Resource::Template.new('/etc/foo.txt')
template.source('foo.erb')
template.run_action(:create)

So, in your case, you want to use `YumPackage`:

module ABC
  class YumD
    def self.pack(*count)
      for i in 0...count.length
        package = Chef::Resource::YumPackage.new("#{count[i]}")
        package.run_action(:install)
      end
    end
  end
 end

Problem

I am just trying to create a simple cookbook in chef. I am using libraries as a learning process. ``` module ABC class YumD def self.pack (*count) for i in 0...count.length yum_packag "#{count[i]}" do action :nothing end.run_action :install end end end end ``` When I call this in the recipe I get a compile error which says ``` undefined method `yum_package' for ABC::YumD:Class ```

Original source

Related problems