4

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

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

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

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

4

1 回答 1

10

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

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

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

当你需要在其他地方设置其他优先级的属性时,你就会知道。:)

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

笔记

这个问题不是厨师版本控制的重复 - 是否有优先顺序- 该问题与食谱版本有关,而此问题与节点属性优先级有关。

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

于 2013-12-30T07:49:36.393 回答