【发布时间】:2014-05-15 15:53:36
【问题描述】:
如何访问食谱属性文件中自己的库函数(在以下模块中创建)?
module Gerrit
module Helpers
def gerrit_above?(version)
require 'chef/version_constraint'
Chef::VersionConstraint.new(">= #{version}").include?(node['gerrit']['version'])
end
end
end
Chef::Recipe.send(:include, ::Gerrit::Helpers)
Chef::Resource.send(:include, ::Gerrit::Helpers)
Chef::Provider.send(:include, ::Gerrit::Helpers)
我可以通过gerrit_above? 在食谱中访问它,但没有找到一种方法让它同时在属性文件中可用。我尝试了以下行
Chef::Node::Attribute.send(:include, ::Gerrit::Helpers)
但随后在访问node 时失败:
Undefined method or attribute `node' on `node'
有人有干净的解决方案吗?
【问题讨论】:
-
属性是在库之前加载的,所以你真的不能。你想达到什么目的?如果你需要一个库来计算一个属性,那个属性太复杂了imo
-
我想根据部署的应用程序(gerrit)的版本来设置节点属性。只会是化妆品,我也可以在食谱中这样做。谢谢
-
我通常在任何类型的计算或编译属性上都是-1。他们会给你带来麻烦。另外,问问自己 - 这真的应该是可调的,还是我只是将属性用作全局变量?
标签: chef-infra