gba*_*aii 2 ruby erb chef-infra
我有这些数组
services=["service1","service2","service3"]
ports=[11001,11002,11003]
对于每个服务元素,我需要在conf.erb文件中分配端口的对应元素.我到现在所拥有的是:
node['recipe']['services'].each do |serv|
  template "/etc/services/conf.d/service-#{serv}.conf" do
    source "service-#{serv}.conf.erb"
    owner 'serviceaccount'
    group 'serviceaccount'
    mode '0644'
    variables(
      :service => serv,
      :ports => node['services']['ports']
    )
  end
end
听起来很糟糕,结果很糟糕.
结果应该是3个conf文件:
服务service1.conf:
服务服务1港口11001
服务service2.conf:
服务服务2港口11002
服务service3.conf:
服务服务3港口11003
任何帮助表示赞赏.
谢谢,加布里埃尔
我该如何解决这个问题:
在attributes/default.rb:
default['services']['service1']['port'] = 11001
default['services']['service2']['port'] = 11002
default['services']['service3']['port'] = 11003
或(替代语法):
default['services'] = {
 "service1" => { "port" => 11001 },
 "service2" => { "port" => 11002 },
 "service3" => { "port" => 11003 }
}
在recipes/default.rb:
node['services'].each do |serv,properties|
  template "/etc/services/conf.d/service-#{serv}.conf" do
    source "service-#{serv}.conf.erb"
    owner 'serviceaccount'
    group 'serviceaccount'
    mode '0644'
    variables(
      :service => serv,
      :ports => properties['port']
    )
  end
end
当迭代哈希(什么节点属性基于)时,您可以使用|key,values|ruby 的语法来获取第一个变量中的键和第二个变量中的值(可能是另一个哈希).