我注意到,如果我在烹饪书中使用node.default
,环境中的属性不会被应用(相反,烹饪书属性会被应用)。但是,如果我使用node
,那么在环境中更改的属性就会得到应用;为什么?我以为node
和node.default
是一体的?
节点属性的优先级可能会令人困惑。这个文件确实有帮助,一旦你读了几遍
https://docs.chef.io/attributes.html
我的建议如下:
- 在烹饪书的属性文件中设置默认属性。不要在食谱中也这样做,从而混淆自己
- 通过设置"正常"属性覆盖其他烹饪书的属性,并在烹饪书中的属性文件中再次执行此操作
- 在运行时,使用"环境"或"角色"属性覆盖食谱中设置的所有属性
- 永远不要直接在厨师服务器上编辑节点属性。没有事务锁定,这意味着如果厨师客户端同时运行,您的更新可能会丢失
这里的目标是一致性
node
为您提供了整个节点对象的视图。仅node.default
告诉您在default
级别设置了哪些值。因此,您永远不应该阅读node.default
,因为您将明确忽略所有更高的先例级别。即,你的overrides
不算在内。node.default
的存在允许您在节点上设置默认值。