Chef

將變數傳遞給廚師模板的正確方法是哪種?

  • April 5, 2016

查看此官方文件: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

這是紅寶石的事,不是廚師的事。

當您使用時,( :key => value )您正在傳遞一個隱含的雜湊。Ruby 決定它在括號內看到的內容類似於雜湊,並自動轉換為雜湊。

當你使用 時{ },你實際上是在傳遞一個塊。Ruby 然後執行該塊,並將該塊的結果作為參數傳回。到目前為止,我發現這個符號最有可能給你帶來麻煩。

當您使用時,({ :key => value })您明確地將雜湊傳遞給該方法。括號顯式定義方法參數,括號是定義雜湊的標準符號(沒有 ruby​​ 魔法來自動檢測參數的雜湊值)。

我想說沒有明確的最佳/正確方法,但 ruby​​ 風格指南似乎更喜歡第一個版本。

引用自:https://serverfault.com/questions/713678