加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 如何从Chef cookbook中的库访问当前节点?

发布时间:2020-12-16 23:09:14 所属栏目:百科 来源:网络整理
导读:我正在尝试为厨师食谱编写一个库,简化了一些常见搜索. 例如,我希望能够在cookbook / libraries / library.rb中执行类似的操作,然后在同一个cookbook中的配方中使用它: module Example def self.search_attribute(attribute_name) return search(:nodes,node
我正在尝试为厨师食谱编写一个库,简化了一些常见搜索.

例如,我希望能够在cookbook / libraries / library.rb中执行类似的操作,然后在同一个cookbook中的配方中使用它:

module Example
    def self.search_attribute(attribute_name)
        return search(:nodes,node[attribute_name])
    end
end

问题是,在Chef库文件中,节点对象或搜索功能都不可用.

使用Chef :: Search :: Query.new().search(…)似乎可以搜索,但我找不到任何可以访问节点的东西.由此产生的错误是:

undefined local variable or method `node' for Example:Module

使用Chef 10.16.4.

解决方法

您可以做的是将模块包含在配方中.这样,您的模块函数就可以访问配方的方法,包括节点.

我通常为我的库模块执行此操作:

# my_cookbook/libraries/helpers.rb
module MyCookbook
  module Helpers
    def foo
      node["foo"]
    end
  end
end

然后,在配方中,我将模块包含在配方的当前实例中:

# my_cookbook/recipes/default.rb
extend MyCookbook::Helpers

这样,只有当前配方包含模块,而不是所有这些都在整个厨师运行中(因此避免了名称冲突).

或者,您可以将当前节点作为参数传递给函数.这样,您不需要包含模块(它具有保留模块名称空间的优点),但具有更复杂的方法调用的缺点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读