нет значения по умолчанию для обязательного атрибута

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

Одна вещь, на которую следует обратить внимание - если она 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 даст вам более полезное сообщение при сбое:

[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
ЗТС
источник