如何在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
链接地址: http://www.djcxy.com/p/47153.html

上一篇: How do you create pretty json in CHEF (ruby)

下一篇: Best way to pretty print a hash