nessun valore predefinito per l'attributo richiesto


8

Qual è l'approccio raccomandato per l'utilizzo di un attributo in una risorsa, come un modello, quando non esiste un valore predefinito ragionevole per quell'attributo. Il valore dell'attributo dovrebbe essere fornito in fase di esecuzione. In caso contrario, l'esecuzione della ricetta dello chef dovrebbe essere errata.

Il modo in cui ho le cose ora il valore dell'attributo quando applicato al modello è stringa vuota.

/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 %>"

Il file /var/tmp/my_script.sh risultante sarebbe simile al seguente:

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

Ma vorrei che si limitasse a fuoriuscire. Qualche consiglio?

Risposte:


5

Una cosa da sottolineare: se node['environment']non è stato impostato affatto, il tuo esempio fallirebbe così com'è. Ecco l'output che ho ottenuto:

[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

Ma questo non è molto utile e non è sempre abbastanza. Forse vuoi fare qualche ulteriore convalida dell'attributo. In tal caso, puoi inserire qualcosa di simile nella tua ricetta:

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

Ora, la corsa dello Chef ti darà un messaggio più utile quando fallisce:

[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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.