不能在Chef中使用helper方法

时间:2014-12-21 04:53:14

标签: ruby chef

我想在配方中使用一个方法,所以我为它创建了一个辅助方法。

my_cookbook /库/ foo_helper.rb

module Foo
  module Helper
    def foo_daemon_command(action)
      %Q{bash -c "export PATH='/usr/local/bin:/opt/rbenv/bin:$PATH'; eval '$(rbenv init -)'; cd /opt/foo; /opt/rbenv/shims/ruby foo_daemon.rb #{action} >>/var/log/foo/cron_#{action}.log 2>>/var/log/foo/cron_#{action}.log" }
    end
  end
end

从配方中加载方法。

my_cookbook /食谱/ default.rb

Chef::Resource::User.send(:include, Foo::Helper)

execute "foo daemon restart" do
  command foo_daemon_command("restart")
end

当我应用食谱时,我得到undefined method错误,如下所示:

NoMethodError
-------------
undefined method `foo_daemon_command' for Chef::Resource::Execute

我做错了什么?

1 个答案:

答案 0 :(得分:2)

特定错误是您正在将函数修补到User资源而不是Execute。但更好的方法是将其混合到当前配方中。只需将extend Foo::Helper添加到食谱顶部即可。您也可以将其设为模块方法,并将其直接称为Foo::Helper.foo_daemon_command。一般来说,全球DSL变更应该非常小心,而不是从食谱代码中完成。