我是一名厨师新手,正努力解决
之间的区别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]
也适用于它们的设置属性?1 >
答案 0 :(得分:2)
厨师惯例不时变化。
如果您使用的是最新版本的Chef,则应使用node.default
而不是旧的方式。
阅读attribute precedence了解更多信息
答案 1 :(得分:1)
考虑节点属性的最简单方法就是变量。
SELECT ID from Users u
JOIN Zipcodes z1 ON u.zipcode = z1.zipcode
WHERE
COS(SIN(PI()*z1.latitude/180.0)*SIN(PI()*[desired latitude]/180.0)+COS(PI()*z1.latitude/180.0)*COS(PI()*[desired latitude]/180.0)*COS(PI()*[desired longitude]/180.0-PI()*z1.longitude/180.0))*3963.0 <= [desired distance]
#分配属性/变量node.default[:foo] = 'something'
#访问属性/变量的内容随着优先级的不同,它变得更加复杂,但这就是要旨。
node.default[:foo]
和default[:foo] = 'something'
在功能上是相同的。您可以在属性文件的最前面使用没有节点的默认设置,但在配方中不能使用。这只是捷径。
厨师首先加载属性文件,因此,如果在其中设置了default [:foo],然后在配方中设置了node.default [:foo],则该值将被覆盖。