我是一名厨师新手,并试图围绕两者之间的差异
default[:foo] = 'something'
和
node[:foo]
和
node.default[:foo] = 'nothing'
我知道厨师文档中的属性有一个属性优先级,但我仍然想验证我的理解是否正确。
我的理解
default[:foo] = 'something'
这是最低优先级并设置foo
node[:foo]
这不是设置任何东西,只是获得foo的值,典型的用例是条件语句node.default[:foo] = 'nothing'
凌驾于default[:foo]
我想我想在这里证明的一点是node[:foo]
仅用于获取而不是设置,对于default[:foo]
和node.default[:foo]
它们也只适用于setter属性?
厨师大会不时变化。如果你使用最新的厨师版,你应该使用node.default
而不是旧的方式。
阅读attribute precedence了解更多信息
考虑节点属性的最简单方法就是变量。
node.default[:foo] = 'something'
#分配属性/变量node.default[:foo]
#访问属性/变量的内容不同级别的优先级会变得更复杂,但这就是要点。
default[:foo] = 'something'
和node.default[:foo] = 'something'
在功能上是一回事。您可以在Attributes文件的前面使用默认情况下不带节点,但不能在配方中使用。它只是一个捷径。
Chef首先加载属性文件,因此如果你在那里设置了默认的[:foo],然后在配方中设置了node.default [:foo],那么该值将被覆盖。