Bisakah seseorang tolong jelaskan bagaimana cara kerja chef? Itu adalah pertanyaan yang cukup luas, jadi untuk mempersempitnya saya punya resep yang sangat sederhana ini yang melingkupi daftar pengguna dan membuat masing-masing jika mereka belum ada. Tidak bekerja.
Dari apa yang saya tahu loop tampaknya terjadi seperti yang saya harapkan. Setelah loop telah menyelesaikan perintah bash saya untuk membuat setiap pengguna dieksekusi, satu kali untuk setiap iterasi dalam loop. Namun, ketika perintah bash dieksekusi mereka hanya tampaknya memiliki nilai pengguna dari iterasi loop pertama.
Apa cara yang benar untuk menulis resep yang mengulang data variabel yang mirip dengan contoh ini?
Ini resepnya:
node[:users].each do |user|
puts "in loop for #{user['username']}"
bash "create_user" do
user "root"
code do
puts "running 'useradd' for #{user['username']}"
"useradd #{user['username']}"
end
not_if do
puts "checking /etc/passwd for #{user['username']}"
"cat /etc/passwd | grep #{user['username']}"
end
end
end
Saya menguji ini menggunakan Vagrant dengan pengaturan berikut:
Vagrant::Config.run do |config|
config.vm.box = "precise32"
config.vm.box_url = "http://files.vagrantup.com/precise32.box"
config.vm.provision :chef_solo do |chef|
chef.add_recipe "sample"
chef.json = {
:users => [
{:username => 'testA'},
{:username => 'testB'},
{:username => 'testC'},
{:username => 'testD'},
{:username => 'testE'},
],
}
end
end
Pesan-pesan yang dihasilkan oleh pernyataan menempatkan dalam resep terlihat seperti ini:
2013-03-08T01:03:46+00:00] INFO: Start handlers complete.
in loop for testA
in loop for testB
in loop for testC
in loop for testD
in loop for testE
[2013-03-08T01:03:46+00:00] INFO: Processing bash[create_user] action run (sample::default line 5)
checking /etc/passwd for testA
[2013-03-08T01:03:46+00:00] INFO: Processing bash[create_user] action run (sample::default line 5)
checking /etc/passwd for testA
[2013-03-08T01:03:46+00:00] INFO: Processing bash[create_user] action run (sample::default line 5)
checking /etc/passwd for testA
[2013-03-08T01:03:46+00:00] INFO: Processing bash[create_user] action run (sample::default line 5)
checking /etc/passwd for testA
[2013-03-08T01:03:46+00:00] INFO: Processing bash[create_user] action run (sample::default line 5)
checking /etc/passwd for testA
[2013-03-08T01:03:46+00:00] INFO: Chef Run complete in 0.026071 seconds