Kein Standardwert für das erforderliche Attribut

8

Was ist der empfohlene Ansatz für die Verwendung eines Attributs in einer Ressource wie einer Vorlage, wenn es für dieses Attribut keinen vernünftigen Standard gibt? Der Attributwert wird voraussichtlich zur Laufzeit bereitgestellt. Ist dies nicht der Fall, sollte die Ausführung des Kochrezepts fehlerhaft sein.

Die Art und Weise, wie ich jetzt den Attributwert habe, wenn er auf die Vorlage angewendet wird, ist eine leere Zeichenfolge.

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

Die resultierende Datei /var/tmp/my_script.sh sieht folgendermaßen aus:

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

Aber ich wünschte, es wäre nur ein Fehler. Irgendein Rat?

Sarah Haskins
quelle

Antworten:

5

Eine Sache, auf die Sie hinweisen sollten: Wenn sie node['environment']überhaupt nicht festgelegt wurde, würde Ihr Beispiel so wie es ist scheitern. Hier ist die Ausgabe, die ich bekommen habe:

[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

Aber das ist nicht sehr hilfreich und nicht immer genug. Vielleicht möchten Sie das Attribut zusätzlich validieren. In diesem Fall können Sie so etwas in Ihr Rezept aufnehmen:

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

Jetzt gibt Ihnen der Chef-Lauf eine hilfreichere Nachricht, wenn er fehlschlägt:

[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
quelle