Chef infra 如何使用“厨师”;搜索“;库代码中的方法(模块中的方法)?

Chef infra 如何使用“厨师”;搜索“;库代码中的方法(模块中的方法)?,chef-infra,Chef Infra,在库代码中使用“搜索”方法时遇到问题: libraries/helpers.rb Bcpc Helper extend self def help(node=node) search(:node, "....") end end end Chef::Recipe.send(:include, Bcpc::Helper) Chef::Resource.send(:include,Bcpc::Helper)用于使用模块方法的食谱 然后在以下配方中使用此模

在库代码中使用“搜索”方法时遇到问题: libraries/helpers.rb

Bcpc
  Helper
    extend self
    def help(node=node)
      search(:node, "....")
    end
  end
end
Chef::Recipe.send(:include, Bcpc::Helper)
Chef::Resource.send(:include,Bcpc::Helper)用于使用模块方法的食谱

然后在以下配方中使用此模块方法: Bcpc::Helper.help(节点) 当我运行它时,它会报告一个错误,即Bcpc::Helper:模块中未定义搜索方法

我发现搜索方法是在Chef::search::Query类中定义的。然后我尝试在我的库代码中使用搜索的全名,比如:Chef::search::Query.search(:node,“…”)。 但据报告,在Chef::search::Query中未定义搜索。 这个搜索方法应该是一个可以用类名调用的静态方法吗

在这种情况下,如何在库代码中使用厨师提供的“搜索”方法?
谢谢

你想要这样的东西

Chef::Search::Query.new.search(:node, 'foo:bar') do |n|
  # something with n
end

请检查,这似乎和你的问题相似。@rastasheep谢谢,耶,相似。但这是一种方法。我还想在参数中传递方法引用。但是我想看看其他更好的主意。谢谢你的解决方案,它真的很有帮助。这里我有一个担忧。“Chef::Search::Query.new.Search(:node,'foo:bar')”是否返回与Search(:node,'foo:bar')相同的结果?我认为这个“搜索”功能是针对Chef服务器运行的。因此,“搜索”的上下文可能是在chef运行期间构建的。但是,如果我们使用“Chef::Search::Query.new.Search(:node,'foo:bar')”,它是否仍然能够感知上下文。无论如何,我会尝试一下,并报告我的结果。是的,只要看看Awsome的实现,就知道了。非常感谢。