将variables传递给厨师模板的正确方法是哪种方法?

看看这个官方文档: https : //docs.chef.io/resource_template.html我看到传递给模板资源的variables的例子,使用“{”,“({”或“(”来范围variables。

我找不到解释差异的地方,或者为什么我会用另一种forms。 运行配方时真的有实际的区别吗?

例1:

template '/tmp/config.conf' do source 'config.conf.erb' variables( :config_var => node['configs']['config_var'] ) end 

例2:

 template '/tmp/config.conf' do source 'config.conf.erb' variables{ :config_var => node['configs']['config_var'] } end 

例3:

 template '/tmp/config.conf' do source 'config.conf.erb' variables({ :config_var => node['configs']['config_var'] }) end 

这是一个ruby的事情,而不是一个厨师的事情。

当你使用( :key => value )你传入一个隐含的散列。 Ruby决定它在parens里面看到的是散列式的,并自动转换成散列。

当您使用{ } ,您实际上正在传递一个块。 Ruby然后执行该块,并将块的结果作为参数传回。 到目前为止,我发现这个符号是最可能造成麻烦的。

当您使用({ :key => value })您显式传递一个散列到方法。 parens明确地定义了方法参数,而括号是定义一个hash的标准符号(没有ruby魔法来自动检测参数的散列性)。

我会说没有明确的最好/正确的方式,但ruby风格指南似乎更喜欢第一个版本。