如何在CHEF中创建漂亮的json(ruby)
你会如何制作具有人类可读性json的erb模板?
下面的代码工作,但它使平坦的JSON文件
default.rb
default['foo']['bar'] = { :herp => 'true', :derp => 42 }
recipe.rb
template "foo.json" do
  source 'foo.json.erb'
  variables :settings => node['foo']['bar'].to_json
  action :create
end
foo.json.erb
<%= @settings %>
  类似的SO问题 
  厨师和红宝石模板 - 如何通过键值对循环? 
  我如何“漂亮”在Ruby on Rails中格式化我的JSON输出? 
正如这个SO所指出的那样.erb模板对HTML和XML非常有用,但对json并不好。
  幸运的是,CHEF使用它自己的json库,使用.to_json_pretty支持这个.to_json_pretty 
IRC中的@coderanger指出,你可以在配方中使用这个库。 本文更全面地展示了如何在食谱中使用厨师助手。
default.rb
# if ['foo']['bar'] is null, to_json_pretty() will error
default['foo']['bar'] = {}
食谱/ foo.rb
pretty_settings = Chef::JSONCompat.to_json_pretty(node['foo']['bar'])
template "foo.json" do
  source 'foo.json.erb'
  variables :settings => pretty_settings
  action :create
end
或者YMMV指出的更简洁
default.rb
# if ['foo']['bar'] is null, to_json_pretty() will error
default['foo']['bar'] = {}
食谱/ foo.rb
template "foo.json" do
  source 'foo.json.erb'
  variables :settings => node['foo']['bar']
  action :create
end
模板/ foo.json.erb
<%= Chef::JSONCompat.to_json_pretty(@settings) %>
像这样的东西也可以工作:
file "/var/my-file.json" do
  content Chef::JSONCompat.to_json_pretty(node['foo']['bar'].to_hash)
end
