也许我在文档中遗漏了一些东西,但在阅读了在多个地方定义时使用属性的顺序后,我不明白在节点级别设置的属性在哪里进入等式
在可以设置和覆盖属性的1到15级中,它提到了配方,环境,角色,属性文件,但似乎从未提及在节点上定义的属性会发生什么,例如knife node edit ...
看起来您只能在节点上定义普通类型的属性?仅列出了...属性文件和配方中的优先级7和8的正常属性。
那么,如果我在节点上设置了一个属性,该属性也是在环境和角色级别上定义谁赢了?
答案 0 :(得分:7)
The Chef Documentation有一个table showing the node attribute precedence。如果您在Chef服务器上编辑节点对象,或者使用JSON文件(chef-solo或chef-client的-j
选项)提供节点属性,则这些都是“节点”级别。这与从配方中设置属性的级别相同。要使用whit,您可以轻松地在配方中设置任何级别的节点属性w /属性方法(node.normal等),自动除外。在节点对象本身(在Chef服务器中),您可以设置default,normal和override,但不能设置force_default或force_override,也不能自动设置。
我们告诉人们的一般准则是始终使用默认属性:
default['thing'] = 'thang'
- 在食谱的属性文件中。node.default['thing'] = 'thang'
- 在食谱中。"default": { "thing": "thang" }
- 在节点对象的JSON default_attributes("thing" => "thang")
- 角色(ruby DSL syntax shown)。environment
设置属性... 当您需要在其他优先级的其他位置设置属性时,您就会知道。 :)
似乎任意过度设计;最初只有节点对象/配方和属性文件,它们只是Ruby哈希。然后我们添加了角色和环境。在某些时候,我们也需要设置“默认”值,这些值可以轻易地被覆盖,任意出于各种组织原因,现在我们有了你今天看到的矩阵。我们现在非常满意,并认为它为各种各样的厨具用例提供了最大的灵活性。
注意强>
此问题与chef versioning - is there an order of precedence不重复 - 该问题与食谱版本有关,此问题与节点属性优先级有关。
另请注意,由于配方是Ruby,并且由客户端执行,因此您可以编写库以有趣的方式操作属性。一个例子是Chef's whitelist-node-attrs cookbook。