Qual é o caminho correto para passar variáveis para modelos de chef?

5

Olhando para esta documentação oficial: link vejo exemplos de passar variáveis para o recurso de modelo que usa "{" , "({" ou "(" para escopo das variáveis.

Não consigo encontrar um lugar explicando a diferença ou por que eu usaria um formulário sobre o outro. Existe realmente alguma diferença prática ao executar a receita?

Exemplo 1:

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

Exemplo 2:

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

Exemplo 3:

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

1 resposta

8

Isso é coisa de rubi, não é coisa de chef.

Quando você usa ( :key => value ) , está passando um hash implícito. Ruby decide que o que vê dentro dos parens é semelhante a um hash e converte automaticamente para um hash.

Quando você usa { } , na verdade você está passando um bloco. Ruby então executa o bloco e passa os resultados do bloco de volta como argumentos. Eu descobri que essa notação é, de longe, a mais provável de causar problemas.

Quando você usa ({ :key => value }) , você está passando explicitamente um hash para o método. Os parentes definem explicitamente os argumentos do método, e os parênteses são a notação padrão para definir um hash (sem magia rubi para detectar automaticamente o hash dos argumentos).

Eu diria que não há uma maneira melhor / certa definitiva, mas os guias de estilo ruby parecem preferir a primeira versão.

    
por 13.08.2015 / 15:35

Tags