我遇到的问题是当我尝试为引导虚拟机自动化一个terraform脚本时。我将所有模板保存在json文件中,根据实例,它将采用一个,两个或更多模板来创建节点json文件。 我的代码如下:
template.each do |t|
node = JSON.parse(File.read("./terraform/node/#{t}.json"))
atr << node.each { |k, v| puts "#{k}: #{v}" }
concatenated = atr.flatten
temp = concatenated
File.open("./terraform/node/#{instance_name}.json","w") do |f|
f.puts JSON.pretty_generate(temp)
end
end
输出文件如下所示:
[{"haproxy"=>{"app_server_role"=>["s1", "s2"]}}, {"apache"=>{"listen_ports"=>["80", "443"]}}, {"tags"=>[]}]
问题是在数组中我们有精确的模板存储在erb:
中{"haproxy"=>{"app_server_role"=>["s1", "s2"]}}
{"tags"=>[]} ...
我想要的是一个有效的json,其中包含以下模板的内容:
{"haproxy"=>{"app_server_role"=>["s1", "s2"]}, "apache"=>{"listen_ports"=>["80", "443"]}, {"tags"=>[]}
答案 0 :(得分:1)
output_file = [{"haproxy"=>{"app_server_role"=>["s1", "s2"]}}, {"apache"=>{"listen_ports"=>["80", "443"]}}, {"tags"=>[]}]
output_file.each_with_object({}) { |h, h2| h2.merge!(h) }
=> {"haproxy"=>{"app_server_role"=>["s1", "s2"]}, "apache"=>{"listen_ports"=>["80", "443"]}, "tags"=>[]}
mudasobwa提出的另一个很好的选择:
output_file.reduce(&:merge)