Каков рекомендуемый подход к использованию атрибута в ресурсе, например шаблона, если для этого атрибута нет разумного значения по умолчанию. Ожидается, что значение атрибута будет предоставлено во время выполнения. Если это не так, выполнение рецепта шеф-повара должно произойти с ошибкой.
Теперь, когда у меня есть вещи, значение атрибута при применении к шаблону - это пустая строка.
/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: "
Но я бы хотел, чтобы это просто вышло из строя. Любой совет?
Следует отметить одно - если 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