필수 속성에 대한 기본값이 없습니다.


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 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.