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