哪种方法才是将变量传递给 chef 模板的正确方法?

哪种方法才是将变量传递给 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

示例 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

答案1

这是红宝石的事情,不是厨师的事情。

使用时,( :key => value )您传入的是隐含的哈希值。Ruby 会判断括号内的内容是否为哈希值,并自动将其转换为哈希值。

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

使用时,({ :key => value })您明确将哈希传递给方法。括号明确定义方法参数,方括号是定义哈希的标准符号(没有 ruby​​ magic 可以自动检测参数的哈希性)。

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

相关内容