Глядя на эту официальную документацию: https://docs.chef.io/resource_template.html Я вижу примеры передачи переменных в ресурс Template, которые используют "{", "({" или "(" для определения области видимости переменных.
Я не могу найти место, объясняющее разницу или почему я бы использовал одну форму вместо другой. Есть ли какая-то практическая разница при запуске рецепта?
template '/tmp/config.conf' do
source 'config.conf.erb'
variables(
:config_var => node['configs']['config_var']
)
end
template '/tmp/config.conf' do
source 'config.conf.erb'
variables{
:config_var => node['configs']['config_var']
}
end
template '/tmp/config.conf' do
source 'config.conf.erb'
variables({
:config_var => node['configs']['config_var']
})
end
Это рубиновая вещь, а не вещь повара.
Когда вы используете ( :key => value )
вы передаете подразумеваемый хеш. Ruby решает, что то, что он видит внутри скобок, похоже на хэш, и автоматически преобразуется в хеш.
Когда вы используете { }
, вы фактически проходите блок. Затем Ruby выполняет блок и передает результаты блока обратно в качестве аргументов. Я обнаружил, что эта нотация с наибольшей вероятностью доставит вам неприятности.
Когда вы используете ({ :key => value })
вы явно передаете хеш методу. Скобки явно определяют аргументы метода, а квадратные скобки - это стандартная нотация для определения хэша (никакой магии рубина для автоматического определения хеш-кода аргументов).
Я бы сказал, что не существует однозначного наилучшего / правильного способа, но руководства по стилю рубин, кажется, предпочитают первую версию.