我正在使用puppet为ruby程序提供一组常量。 我需要提供一个我的程序将迭代的主机名数组。
在我之前使用的bash脚本中,我只是将其作为木偶变量
hosts => "host1,host2"
我提供给bash脚本
HOSTS=<%= hosts %>
显然这对红宝石不太有用 - 我需要格式为
hosts = ["host1","host2"]
自
p hosts
和
puts my_array.inspect
提供输出
["host1","host2"]
我希望使用其中一个。 不幸的是,我不能为我的生活弄清楚如何使这项工作。 我尝试过以下各项:
<% p hosts %>
<% puts hosts.inspect %>
我找到了他们表示我需要在函数调用前放置“function_”的地方......这似乎不起作用。我已经确定了一个迭代模型:
[<% hosts.each do |host| -%>"<%=host%>",<% end -%>]
这有效,给我
["host1","host2",]
但是尾随的逗号感觉很草率。整件事感到草率。有没有人有更好的方法?或者我是最好的选择?
答案 0 :(得分:4)
我用这种方式解决了(Puppet v3.0.1):
{
"your_key1": {
"your_key2": [<% puppet_var.join('", "').each do |val| %>"<%= val %>"<% end -%>]
}
}
如果$ puppet_var是一个类似[“a”,“b”]的数组,输出应该类似于:
{
"your_key1": {
"your_key2": ["a", "b"]
}
}
答案 1 :(得分:3)
Ruby允许在括号之间使用%w shorcut来初始化数组。这样做:
hosts = %w{<%= hosts.join(' ') %>}
答案 2 :(得分:0)
使用to_json
;
hosts.to_json
=> "[\"host1\",\"host2\"]"