除非在节点属性中重写,否则请使用默认属性值

时间:2013-12-27 13:25:35

标签: chef

在模板中使用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'的方法是什么?

1 个答案:

答案 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
相关问题