2

食谱/库/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 自定义资源——没有提供程序文件。一切都在资源本身中描述。

如何使用新型自定义资源语法“模块化”我的助手?

4

2 回答 2

1

您可以访问内部“动作类”来添加方法:

action_class do
  include SampleModule
end
于 2015-12-29T18:42:58.770 回答
0

您需要在操作块内进行扩展。当像这样传入一个块时,会产生一个与顶层不同的类。因为您正在使用产生该类的块中的函数,所以您需要扩展该类以包含您需要的方法。

您应该可以通过extend SampleModule在操作块中添加第一行来做到这一点。

于 2015-12-29T16:25:34.023 回答