在Chef中使用无提供程序,12.5样式的自定义资源(LWRP)的帮助程序

时间:2015-12-29 15:56:43

标签: ruby chef lwrp

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

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

2 个答案:

答案 0 :(得分:1)

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

action_class do
  include SampleModule
end

答案 1 :(得分:0)

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

您应该可以通过添加extend SampleModule作为操作块中的第一行来实现。