sem valor padrão para o atributo obrigatório

8

Qual é a abordagem recomendada para usar um atributo em um recurso, como um modelo, quando não há um padrão razoável para esse atributo. Espera-se que o valor do atributo seja fornecido no tempo de execução. Se não for, a execução da receita do chef deve resultar em erro.

Do jeito que eu tenho as coisas agora, o valor do atributo quando aplicado ao template é uma string vazia.

/recipes/default.rb

template "/var/tmp/my_script.sh" do
    source "my_script.erb"
    mode "0755"
    variables({
        :url => node['environment']['url']
    })
end

/templates/default/my_script.erb

#!/bin/bash
echo "The url is: <%= @url %>"

O arquivo /var/tmp/my_script.sh resultante ficaria assim:

#!/bin/bash
echo "The url is: "

Mas eu gostaria que fosse apenas um erro. Algum conselho?

    
por Sarah Haskins 16.10.2012 / 02:56

1 resposta

5

Uma coisa a destacar - se node['environment'] não foi definido, seu exemplo falharia como está. Aqui está a saída que recebi:

[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Starting Chef Run for vagrant.int.housepub.org
[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Running start handlers
[Tue, 16 Oct 2012 02:40:31 +0000] INFO: Start handlers complete.
[Tue, 16 Oct 2012 02:40:31 +0000] ERROR: Running exception handlers
[Tue, 16 Oct 2012 02:40:31 +0000] ERROR: Exception handlers complete
[Tue, 16 Oct 2012 02:40:31 +0000] FATAL: Stacktrace dumped to /tmp/vagrant-chef-1/chef-stacktrace.out
[Tue, 16 Oct 2012 02:10:38 +0000] FATAL: NoMethodError: undefined method '[]' for nil:NilClass

Mas isso não é muito útil e nem sempre é suficiente. Talvez você queira fazer alguma validação extra do atributo. Nesse caso, você pode colocar algo assim em sua receita:

unless node['environment']['url'] && node['environment']['url'].size > 5
  Chef::Application.fatal!("The URL attribute isn't long enough.")
end

Agora, a execução do Chef lhe dará uma mensagem mais útil quando falhar:

[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Starting Chef Run for vagrant.int.housepub.org
[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Running start handlers
[Tue, 16 Oct 2012 02:41:36 +0000] INFO: Start handlers complete.
[Tue, 16 Oct 2012 02:41:36 +0000] FATAL: The URL attribute isn't long enough.
[Tue, 16 Oct 2012 02:41:36 +0000] ERROR: Running exception handlers
[Tue, 16 Oct 2012 02:41:36 +0000] ERROR: Exception handlers complete
    
por 16.10.2012 / 04:47