我正在尝试为我的Amazon OpsWorks堆栈创建一个厨师食谱。我想将自定义JSON数据传递到堆栈中,并让配方创建一个.ini文件,以便与PHP的parse_ini_file()命令一起使用。
目前,我可以创建一个平面.ini文件,其中包含以下内容:
{
"settings_ini": {
"quantity": 1,
"width": 10,
"height": 20
}
}
quantity = 1
width = 10
height = 20
template "/my/path/here/settings.ini" do
owner "www_data"
group "www_data"
mode "0644"
source "settings.ini.erb"
variables({
:settings_ini => node[:settings_ini]
})
end
<% @settings_ini.each do |name, value| -%>
<%= name %> = <%= value %>
<% end -%>
我想将我的JSON数据更改为:
{
"settings_ini": {
"quantity": 1,
"attributes": {
"width": 10,
"height": 20
}
}
}
我希望生成的settings.ini文件为:
quantity = 1
[attributes]
width = 10
height = 20
或者,它也可能是这样的:
quantity = 1
[attributes]width = 10
[attributes]height = 20
我需要帮助修改我的settings.ini.erb模板文件才能正确使用嵌套的JSON数据。
答案 0 :(得分:1)
您可以使用递归函数。
坚持libraries/hash_to_ini.rb
:
def hash_to_ini(hash, lines = [])
hash.each do |name, value|
unless value.is_a? Hash
lines << "#{name} = #{value}"
else
lines << "[#{name}]"
lines = hash_to_ini(value, lines)
end
end
return lines
end
然后在你的模板中:
<% hash_to_ini(@settings_ini).each do |line| -%>
<%= line %>
<% end -%>
答案 1 :(得分:0)