在模板中使用chef
中的属性的默认值最有礼貌的方法是什么?
所以default/attributes.rb
我有一个默认值:
default['my_attribute'] = 'some_default_value'
我想在一些具有节点属性的节点上覆盖它:
node['my_attribute'] = 'some_defined_value'
在我的模板中,我只想使用:
@my_attribute
从default ['my_attribute']或node ['my_attribute'](如果已定义)获取值
最礼貌和最Chef
'的方法是什么?
答案 0 :(得分:2)
Ohai!
首先,我建议您查看attribute-precedence model以供参考。
你是正确的,在你的属性文件中,定义这样的东西(注意,这是在菜谱之后命名空间属性的常见做法):
default['cookbook']['attribute'] = 'original_value'
然后在配方中,您可以通过调用node
来改变node.set
对象:
node.set['cookbook']['attribute'] = 'new_value'
这会将当前节点状态和保存回服务器(如果使用Chef服务器)。
然后,在您的template
资源中,直接传递值:
template '/tmp/foo.txt' do
variables(
:my_attribute => node['cookbook']['attribute']
)
end