aucune valeur par défaut pour l'attribut requis

8

Quelle est l'approche recommandée pour utiliser un attribut dans une ressource, comme un modèle, lorsqu'il n'y a pas de valeur par défaut raisonnable pour cet attribut. La valeur d'attribut devrait être fournie lors de l'exécution. Si ce n'est pas le cas, l'exécution de la recette du chef devrait afficher une erreur.

La façon dont j'ai les choses maintenant la valeur d'attribut lorsqu'elle est appliquée au modèle est une chaîne vide.

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

Le fichier /var/tmp/my_script.sh résultant ressemblerait à ceci:

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

Mais je souhaite que ce soit une erreur. Aucun conseil?

Sarah Haskins
la source

Réponses:

5

Une chose à souligner - si elle node['environment']n'a pas été définie du tout, votre exemple échouerait tel quel. Voici la sortie que j'ai obtenue:

[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

Mais ce n'est pas très utile et ce n'est pas toujours suffisant. Vous souhaitez peut-être effectuer une validation supplémentaire de l'attribut. Dans ce cas, vous pouvez mettre quelque chose comme ça dans votre recette:

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

Maintenant, la course Chef vous donnera un message plus utile en cas d'échec:

[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
zts
la source