【问题标题】:How to use Chef "search" method in library code (in module method)?如何在库代码中使用 Chef“搜索”方法(在模块方法中)?
【发布时间】:2015-03-10 17:40:53
【问题描述】:

我遇到了在库代码中使用“搜索”方法的问题: 库/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:Module中未定义搜索方法的错误

我发现搜索方法是在 Chef::Search::Query 类中定义的。然后我尝试在我的库代码中使用搜索的全名,例如:Chef::Search::Query.search(:node, "....")。 但它报告在 Chef::Search::Query 中未定义搜索。 这个搜索方法是否应该是一个可以通过其类名调用的静态方法?

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

【问题讨论】:

  • 请检查stackoverflow.com/questions/19134728/…,这似乎和你的问题相似。
  • @rastasheep 谢谢,是的,类似的。但这里是一种方法。我也想在参数中传入方法引用。但我想看看其他更好的想法。

标签: chef-infra


【解决方案1】:

你想要这样的东西。

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

【讨论】:

  • 感谢您的解决方案,它真的很有帮助。这里我有一个担心。 “Chef::Search::Query.new.search(:node, 'foo:bar')”返回是否与 search(:node, 'foo:bar') 相同?我认为这个“搜索”功能是针对 Chef Server 运行的。所以也许“搜索”的上下文是在厨师运行期间构建的。但是如果我们使用“Chef::Search::Query.new.search(:node, 'foo:bar')”,它是否仍然可以知道上下文。无论如何,我会试一试,并报告我的结果。
  • 是的,看看search() helper的实现即可
  • 太棒了,明白了。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-24
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
  • 2017-12-08
  • 1970-01-01
相关资源
最近更新 更多