누군가 요리사가 어떻게 작동하는지 설명해 주시겠습니까? 그것은 매우 광범위한 질문이므로 좁히기 위해 사용자 목록을 반복하고 아직 존재하지 않는 경우 각 사용자를 만드는 매우 간단한 레시피가 있습니다. 작동하지 않습니다.
내가 알 수있는 것에서 루프는 내가 예상 한대로 일어나는 것 같습니다. 루프가 완료되면 각 사용자를 만들기위한 bash 명령이 루프에서 반복 될 때마다 한 번씩 실행됩니다. 그러나 bash 명령이 실행될 때 첫 번째 루프 반복의 사용자 값 만있는 것 같습니다.
이 예제와 유사한 변수 데이터를 반복하는 레시피를 작성하는 올바른 방법은 무엇입니까?
레시피는 다음과 같습니다.
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
다음 설정으로 Vagrant를 사용하여 이것을 테스트하고 있습니다.
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
레시피에서 puts 문으로 생성 된 메시지는 다음과 같습니다.
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