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

cb2*_*cb2 6 ruby chef

查看此官方文档:https : //docs.chef.io/resource_template.html我看到了将变量传递给使用“{”、“({”或“(”) 来限定变量范围的模板资源的示例。

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

示例 1:

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

示例 2:

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

示例 3:

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

小智 8

这是红宝石的东西,不是厨师的东西。

当您使用时,( :key => value )您正在传递一个隐含的哈希值。Ruby 决定它在括号内看到的内容是类似散列的,并自动转换为散列。

当您使用 时{ },您实际上是在传递一个块。然后 Ruby 执行该块,并将该块的结果作为参数传回。到目前为止,我发现这种表示法最有可能给您带来麻烦。

当您使用时,({ :key => value })您明确地将散列传递给该方法。括号明确定义了方法参数,括号是定义散列的标准符号(没有 ruby​​ 魔法来自动检测参数的散列性)。

我想说没有确定的最佳/正确方法,但 ruby​​ 风格指南似乎更喜欢第一个版本。