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