在主厨 运行 期间,node 与 node.default 有何不同?

During a chef run how does node differ from node.default?

我注意到,如果我在说明书中使用 node.default,环境中的属性不会被应用(而是应用了说明书属性)。但是,如果我改用 node,则会应用在环境中更改的属性;为什么?我以为 nodenode.default 是一回事?

节点属性优先级可能会造成混淆。文档确实有帮助,一旦你阅读它几次

https://docs.chef.io/attributes.html

我的建议如下:

  1. 在食谱的属性文件中设置默认属性。也不要在食谱中这样做而混淆自己。
  2. 通过设置 "normal" 属性覆盖其他食谱的属性,并在您的食谱中的属性文件中再次执行此操作
  3. 在运行时使用环境或角色属性覆盖说明书中设置的所有属性。
  4. 切勿直接在 Chef 服务器上编辑节点属性。没有事务锁定,这意味着如果厨师客户端同时 运行,您的更新可能会丢失....

这里的objective是一致性

node 使您可以查看整个节点对象。 node.default 仅告诉您在 default 级别设置了哪些值。因此,您永远不应该阅读 node.default,因为您会明确忽略所有更高的先例级别。即,您的 overrides 不算数。 node.default 允许您在节点上设置默认值。