了解厨师的属性

时间:2019-04-03 14:13:48

标签: chef chef-recipe

我是一名厨师新手,正努力解决

之间的区别
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]也适用于它们的设置属性?

2 个答案:

答案 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],则该值将被覆盖。