在主厨 运行 期间,node 与 node.default 有何不同?
During a chef run how does node differ from node.default?
我注意到,如果我在说明书中使用 node.default
,环境中的属性不会被应用(而是应用了说明书属性)。但是,如果我改用 node
,则会应用在环境中更改的属性;为什么?我以为 node
和 node.default
是一回事?
节点属性优先级可能会造成混淆。文档确实有帮助,一旦你阅读它几次
https://docs.chef.io/attributes.html
我的建议如下:
- 在食谱的属性文件中设置默认属性。也不要在食谱中这样做而混淆自己。
- 通过设置 "normal" 属性覆盖其他食谱的属性,并在您的食谱中的属性文件中再次执行此操作
- 在运行时使用环境或角色属性覆盖说明书中设置的所有属性。
- 切勿直接在 Chef 服务器上编辑节点属性。没有事务锁定,这意味着如果厨师客户端同时 运行,您的更新可能会丢失....
这里的objective是一致性
node
使您可以查看整个节点对象。 node.default
仅告诉您在 default
级别设置了哪些值。因此,您永远不应该阅读 node.default
,因为您会明确忽略所有更高的先例级别。即,您的 overrides
不算数。 node.default
允许您在节点上设置默认值。
我注意到,如果我在说明书中使用 node.default
,环境中的属性不会被应用(而是应用了说明书属性)。但是,如果我改用 node
,则会应用在环境中更改的属性;为什么?我以为 node
和 node.default
是一回事?
节点属性优先级可能会造成混淆。文档确实有帮助,一旦你阅读它几次
https://docs.chef.io/attributes.html
我的建议如下:
- 在食谱的属性文件中设置默认属性。也不要在食谱中这样做而混淆自己。
- 通过设置 "normal" 属性覆盖其他食谱的属性,并在您的食谱中的属性文件中再次执行此操作
- 在运行时使用环境或角色属性覆盖说明书中设置的所有属性。
- 切勿直接在 Chef 服务器上编辑节点属性。没有事务锁定,这意味着如果厨师客户端同时 运行,您的更新可能会丢失....
这里的objective是一致性
node
使您可以查看整个节点对象。 node.default
仅告诉您在 default
级别设置了哪些值。因此,您永远不应该阅读 node.default
,因为您会明确忽略所有更高的先例级别。即,您的 overrides
不算数。 node.default
允许您在节点上设置默认值。