No documento de recursos do chef, por que eles têm parênteses em torno do nome no recurso de modelo nos exemplos de execução?

1

Estou analisando o link e, em "Executar", em "Executar um comando usando um modelo ", eles chamam de modelo com parênteses em torno do argumento. Apenas um punhado de declarações anteriores, eles chamam de executar sans parênteses. Para o restante do documento, o modelo é chamado sem parênteses. Existe uma razão para essa inconsistência?

execute "forward_ipv4" do
  command "echo > /proc/.../ipv4/ip_forward"
  action :nothing
end

template( "/etc/file_name.conf" ) do
  source "routing/file_name.conf.erb"
  notifies :run, 'execute[forward_ipv4]', :delayed
end
    
por crazysim 24.01.2013 / 01:18

2 respostas

1

Eu nunca vi essa sintaxe / estilo antes até que você apontasse. É completamente desnecessário e confuso usar parênteses nessa situação. Apenas especificar o modelo e o nome do arquivo é suficiente.

    
por 24.01.2013 / 03:08
1

Receitas do Chef são escritas em Ruby, e o DSL usa #method_missing para definir recursos em receitas.

Assim, cada recurso é um método, que usa um único argumento (uma string, o nome) e um bloco (os parâmetros).

Os parênteses são opcionais em torno dos argumentos em Ruby, e há muito sobre se devem ser usados na internet . Embora não seja importante usá-los nos recursos do Chef, na maioria das vezes eles são omitidos.

No entanto, se você deseja escrever um recurso em uma única linha, precisará de parênteses:

execute "echo Hello" { action :nothing }

SyntaxError: (irb#1):1: syntax error, unexpected '{', expecting $end
execute "echo Hello" { action :nothing }
                      ^

execute("echo Hello") { action :nothing }

 => <execute[echo Hello] @name: "echo Hello" @noop: nil @before: nil
 @params: {} @provider: nil @allowed_actions: [:nothing, :run]
 @action: [:nothing] @updated: false @updated_by_last_action: false
 @supports: {} @ignore_failure: false @retries: 0 @retry_delay: 2
 @source_line: "(irb#1):2:in 'irb_binding'" @elapsed_time: 0
 @resource_name: :execute @command: "echo Hello" @backup: 5 @creates:
 nil @cwd: nil @environment: nil @group: nil @path: nil @returns: 0
 @timeout: nil @user: nil @umask: nil @cookbook_name: nil
 @recipe_name: nil>

(ação nada aqui é apenas para mostrar um exemplo)

    
por 24.01.2013 / 21:10

Tags