必須属性のデフォルト値はありません


8

テンプレートのように、その属性に適切なデフォルトがない場合にリソースで属性を使用するための推奨されるアプローチは何ですか。属性値は実行時に提供されることが期待されています。そうでない場合、シェフレシピの実行はエラーになります。

テンプレートに適用したときの属性値が空の文字列になっている方法。

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

結果の/var/tmp/my_script.shファイルは次のようになります。

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

しかし、私はそれがエラーになることを望みます。何かアドバイス?

回答:


5

注意すべきことの1つ- node['environment']まったく設定されていない場合、例はそのまま失敗します。これが私が得た出力です:

[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

しかし、それはあまり役に立ちませんし、常に十分ではありません。おそらく、属性の追加検証を行う必要があります。その場合は、次のようなものをレシピに追加できます。

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

これで、Chef runが失敗すると、より役立つメッセージが表示されます。

[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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.