如何在 CHEF 中创建漂亮的 json (ruby)
How do you create pretty json in CHEF (ruby)
如何制作人类可读的 erb 模板 json?
以下代码有效,但它生成了一个平面 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 %>
类似的问题
Chef and ruby templates - how to loop though key value pairs?
How can I "pretty" format my JSON output in Ruby on Rails?
正如 this SO Answer 所指出的,.erb 模板非常适合 HTML 和 XML,但不适用于 json。
幸运的是,CHEF 使用其 own json library,它支持使用 .to_json_pretty
IRC 中的@coderanger 指出您可以在食谱中直接使用该库。 This article shows more extensively 如何在食谱中使用厨师助手。
default.rb
# if ['foo']['bar'] is null, to_json_pretty() will error
default['foo']['bar'] = {}
recipe/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'] = {}
recipe/foo.rb
template "foo.json" do
source 'foo.json.erb'
variables :settings => node['foo']['bar']
action :create
end
templates/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
<%= Chef::JSONCompat.to_json_pretty(@settings) %>
很有魅力!!
如何制作人类可读的 erb 模板 json?
以下代码有效,但它生成了一个平面 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 %>
类似的问题
Chef and ruby templates - how to loop though key value pairs?
How can I "pretty" format my JSON output in Ruby on Rails?
正如 this SO Answer 所指出的,.erb 模板非常适合 HTML 和 XML,但不适用于 json。
幸运的是,CHEF 使用其 own json library,它支持使用 .to_json_pretty
IRC 中的@coderanger 指出您可以在食谱中直接使用该库。 This article shows more extensively 如何在食谱中使用厨师助手。
default.rb
# if ['foo']['bar'] is null, to_json_pretty() will error
default['foo']['bar'] = {}
recipe/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'] = {}
recipe/foo.rb
template "foo.json" do
source 'foo.json.erb'
variables :settings => node['foo']['bar']
action :create
end
templates/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
<%= Chef::JSONCompat.to_json_pretty(@settings) %>
很有魅力!!