chef - 节点级别上设置的属性的优先级

时间:2013-12-22 07:41:19

标签: chef knife

也许我在文档中遗漏了一些东西,但在阅读了在多个地方定义时使用属性的顺序后,我不明白在节点级别设置的属性在哪里进入等式

在可以设置和覆盖属性的1到15级中,它提到了配方,环境,角色,属性文件,但似乎从未提及在节点上定义的属性会发生什么,例如knife node edit ...

看起来您只能在节点上定义普通类型的属性?仅列出了...属性文件和配方中的优先级7和8的正常属性。

那么,如果我在节点上设置了一个属性,该属性也是在环境和角色级别上定义谁赢了?

1 个答案:

答案 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,也不能自动设置。

我们告诉人们的一般准则是始终使用默认属性:

  1. default['thing'] = 'thang' - 在食谱的属性文件中。
  2. node.default['thing'] = 'thang' - 在食谱中。
  3. "default": { "thing": "thang" } - 在节点对象的JSON
  4. default_attributes("thing" => "thang") - 角色(ruby DSL syntax shown)。
  5. 一般避免environment设置属性...
  6. 当您需要在其他优先级的其他位置设置属性时,您就会知道。 :)

    似乎任意过度设计;最初只有节点对象/配方和属性文件,它们只是Ruby哈希。然后我们添加了角色和环境。在某些时候,我们也需要设置“默认”值,这些值可以轻易地被覆盖,任意出于各种组织原因,现在我们有了你今天看到的矩阵。我们现在非常满意,并认为它为各种各样的厨具用例提供了最大的灵活性。

    注意

    此问题与chef versioning - is there an order of precedence不重复 - 该问题与食谱版本有关,此问题与节点属性优先级有关。

    另请注意,由于配方是Ruby,并且由客户端执行,因此您可以编写库以有趣的方式操作属性。一个例子是Chef's whitelist-node-attrs cookbook