我正在努力学习图书馆的食谱,并写了一本名为nol的测试库食谱。在nol/libraries/nol_helper.rb中,我有以下代码
module Nol
module Helper
include Chef::Mixin::ShellOut
def has_bacon?
cmd = shell_out!('getent passwd bacon', {:returns => [0,2]})
cmd.stderr.empty? && (cmd.stdout =~ /^bacon/)
end
end
end
在第二本食谱中,我尝试将它包含在default.rb食谱中,作为
class Chef::Resource::User
include Nol::Helper
end
user 'noi' do
action :create
only_if { has_balcon? }
end
但是厨师不断地给出下面的错误
================================================================================
Error executing action `create` on resource 'user[noi]'
================================================================================
NoMethodError
-------------
undefined method `has_balcon?' for Chef::Resource::User
谢谢
发布于 2015-08-26 22:15:11
所以有两件事,一是你有一个简单的拼写错误,但更重要的是,它真的不推荐给monkeypatch核心Chef类。
通过使用模块方法,您可以在不打补丁的情况下完成类似的操作:
module Nol
def self.has_bacon
# As before ....
end
end
user 'noi' do
only_if { Nol.has_bacon? }
end
发布于 2015-08-27 10:11:11
如果您确实希望将此方法添加到用户资源中,则应该扩展provider ::Chef::Provider::User.send(:include, Nol::Helper)
https://stackoverflow.com/questions/32230463
复制