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
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
To improve on sethvargo's answer, which should avoid the undefined method events for nil:NilClass
error: try adding run_context
to the constructor call:
module ABC
class YumD
def self.pack(*count)
for i in 0...count.length
package = Chef::Resource::YumPackage.new("#{count[i]}", run_context)
package.run_action(:install)
end
end
end
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With