为每个循环制作每个循环
Chef each loop for each loop
我有这些数组
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 个配置文件:
服务-service1.conf:
服务服务1
端口 11001
服务-service2.conf:
服务服务2
端口 11002
服务-service3.conf:
服务-服务3
端口 11003
感谢任何帮助。
谢谢,
加布里埃尔
我会改为使用散列,其中键作为您的服务名称,值作为您的端口号。然后你可以用键和值递增你的散列。
使用您的示例代码,类似于:
services = { 'service1' => 11001, 'service2' => 11002, 'service3' => 11003 }
然后在你的食谱中:
node['recipe']['services'].each do |serv, port|
template "/etc/services/conf.d/service-#{serv}.conf" do
source "service-#{serv}.conf.erb"
owner 'serviceaccount'
group 'serviceaccount'
mode '0644'
variables(
:service => serv,
:ports => port
)
end
end
虽然不是很地道的厨师。
我将如何解决这个问题:
在attributes/default.rb
中:
default['services']['service1']['port'] = 11001
default['services']['service2']['port'] = 11002
default['services']['service3']['port'] = 11003
OR(替代语法):
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
当遍历哈希(节点属性基于什么)时,您可以使用 ruby 的 |key,values|
语法来获取第一个变量中的键和值(可能是另一个hash) 在第二个变量中。
我有这些数组
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 个配置文件:
服务-service1.conf:
服务服务1端口 11001
服务-service2.conf:
服务服务2端口 11002
服务-service3.conf:
服务-服务3端口 11003
感谢任何帮助。
谢谢, 加布里埃尔
我会改为使用散列,其中键作为您的服务名称,值作为您的端口号。然后你可以用键和值递增你的散列。
使用您的示例代码,类似于:
services = { 'service1' => 11001, 'service2' => 11002, 'service3' => 11003 }
然后在你的食谱中:
node['recipe']['services'].each do |serv, port|
template "/etc/services/conf.d/service-#{serv}.conf" do
source "service-#{serv}.conf.erb"
owner 'serviceaccount'
group 'serviceaccount'
mode '0644'
variables(
:service => serv,
:ports => port
)
end
end
虽然不是很地道的厨师。
我将如何解决这个问题:
在attributes/default.rb
中:
default['services']['service1']['port'] = 11001
default['services']['service2']['port'] = 11002
default['services']['service3']['port'] = 11003
OR(替代语法):
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
当遍历哈希(节点属性基于什么)时,您可以使用 ruby 的 |key,values|
语法来获取第一个变量中的键和值(可能是另一个hash) 在第二个变量中。