食谱/库/ rn_helper.rb:
def sample_func
puts "woohoo"
end
食谱/资源/ rn.rb:
action :create do
sample_func
end
以上代码完美无缺。以下代码不会:
食谱/库/ rn_helper.rb:
module SampleModule
def sample_func
puts "woohoo"
end
end
食谱/资源/ rn.rb:
extend SampleModule
action :create do
sample_func
end
错误如下:
NameError: custom resource[usr.bin.foo] had an error: NameError: No resource, method, or local variable named 'sample_func' for 'LWRP resource some_resource from cookbook some_cookbook action provider "usr.bin.foo"'
这是一种新式的Chef 12.5自定义资源 - 没有提供程序文件。一切都在资源本身中描述。
如何使用新式自定义资源语法“模块化”我的助手?
答案 0 :(得分:1)
您可以访问内部“操作类”以添加方法:
action_class do
include SampleModule
end
答案 1 :(得分:0)
您需要在操作块中进行扩展。当像这样传递一个块时,会产生一个与顶层不同的类。因为您正在使用块中产生该类的函数,所以需要扩展该类以包含所需的方法。
您应该可以通过添加extend SampleModule
作为操作块中的第一行来实现。