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

Flo*_*Woo 4 chef-infra knife

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

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

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

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

jti*_*man 7

Chef文档有一个表格,显示节点属性优先级.如果在Chef服务器上编辑节点对象,或者使用JSON文件(-jchef-solo或chef-client选项)提供节点属性,则这些都是"节点"级别.这与从配方中设置属性的级别相同.要使用whit,您可以轻松地在配方中设置任何级别的节点属性w /属性方法(node.normal等),自动除外.在节点对象本身(在Chef服务器中),您可以设置default,normal和override,但不能设置force_default或force_override,也不能设置自动.

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

  1. default['thing'] = 'thang' - 在cookbook的属性文件中.
  2. node.default['thing'] = 'thang' - 在食谱中.
  3. "default": { "thing": "thang" } - 在节点对象的JSON中
  4. default_attributes("thing" => "thang")- 在一个角色(显示ruby DSL语法).
  5. 一般避免environment设置属性......

当您需要在其他优先级的其他位置设置属性时,您就会知道.:)

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

注意

这个问题不是厨师版本的重复- 是否有优先顺序 - 该问题与cookbook版本有关,这个问题与节点属性优先级有关.

还要注意,因为配方是Ruby,并且由客户端执行,所以您可以编写库来以有趣的方式操作属性.一个例子是Chef的whitelist-node-attrs cookbook.

  • 好吧,没关系......我找到了答案,这很烦人.----默认情况下,edit命令不会编辑自动,默认或覆盖属性,为此,您必须将-a或--all标志传递给edit命令,这样您就可以编辑所有当前在节点上设置的属性.文档指出--all仅控制显示的内容..并不是它阻止您添加/编辑节点JSON,除非使用. (2认同)