không có giá trị mặc định cho thuộc tính bắt buộc


8

Cách tiếp cận được đề xuất để sử dụng một thuộc tính trong tài nguyên, như mẫu, khi không có mặc định hợp lý cho thuộc tính đó. Giá trị thuộc tính dự kiến ​​sẽ được cung cấp trong thời gian chạy. Nếu không, thực hiện công thức đầu bếp nên lỗi.

Cách tôi có những thứ bây giờ giá trị thuộc tính khi áp dụng cho mẫu là chuỗi rỗng.

/recipes/default.rb

template "/var/tmp/my_script.sh" do
    source "my_script.erb"
    mode "0755"
    variables({
        :url => node['environment']['url']
    })
end

/temsheet/default/my_script.erb

#!/bin/bash
echo "The url is: <%= @url %>"

Tệp /var/tmp/my_script.sh sẽ trông như thế này:

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

Nhưng tôi ước nó sẽ báo lỗi. Có lời khuyên nào không?

Câu trả lời:


5

Một điều cần chỉ ra - nếu node['environment']chưa được đặt, ví dụ của bạn sẽ thất bại. Đây là đầu ra tôi nhận được:

[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

Nhưng điều đó không hữu ích lắm, và nó không phải lúc nào cũng đủ. Có lẽ bạn muốn làm một số xác nhận thêm của thuộc tính. Trong trường hợp đó, bạn có thể đặt một cái gì đó như thế này vào công thức của bạn:

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

Bây giờ, đầu bếp chạy sẽ cung cấp cho bạn một thông điệp hữu ích hơn khi thất bại:

[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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.