Ai đó có thể vui lòng giải thích cho tôi làm thế nào đầu bếp làm việc? Đó là một câu hỏi khá rộng, vì vậy để thu hẹp nó, tôi có công thức rất đơn giản này lặp lại danh sách người dùng và tạo từng người dùng nếu họ chưa tồn tại. Nó không hoạt động.
Từ những gì tôi có thể nói vòng lặp dường như đang xảy ra như tôi mong đợi. Khi vòng lặp đã hoàn thành các lệnh bash của tôi để tạo mỗi người dùng được thực thi, một lần cho mỗi lần lặp trong vòng lặp. Tuy nhiên, khi các lệnh bash được thực thi, chúng dường như chỉ có giá trị người dùng từ lần lặp đầu tiên.
Cách chính xác để viết một công thức lặp lại dữ liệu biến tương tự như ví dụ này là gì?
Đây là công thức:
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
Tôi đang thử nghiệm điều này bằng Vagrant với thiết lập sau:
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
Các thông báo được tạo bởi các câu lệnh put trong công thức trông như thế này:
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