tidak ada nilai default untuk atribut yang diperlukan

8

Apa pendekatan yang disarankan untuk menggunakan atribut dalam sumber daya, seperti templat, ketika tidak ada standar yang masuk akal untuk atribut itu. Nilai atribut diharapkan akan disediakan saat runtime. Jika tidak, eksekusi resep koki harus salah.

Cara saya memiliki banyak hal sekarang nilai atribut ketika diterapkan ke template adalah string kosong.

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

File /var/tmp/my_script.sh yang dihasilkan akan terlihat seperti ini:

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

Tapi saya berharap itu hanya kesalahan. Ada saran?

Sarah Haskins
sumber

Jawaban:

5

Satu hal yang perlu diperhatikan - jika node['environment']belum disetel sama sekali, contoh Anda akan gagal. Inilah hasil yang saya dapat:

[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

Tapi itu tidak terlalu membantu, dan itu tidak selalu cukup. Mungkin Anda ingin melakukan validasi atribut tambahan. Dalam hal ini, Anda dapat memasukkan sesuatu seperti ini ke dalam resep Anda:

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

Sekarang, program Chef akan memberi Anda pesan yang lebih bermanfaat ketika gagal:

[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
rts
sumber