如何在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