通过erb模板输出ruby数组

Hit*_*tch 5 ruby templates erb puppet

我正在使用puppet为ruby程序提供一组常量.我需要提供一个我的程序将迭代的主机名数组.

在我之前使用的bash脚本中,我只是作为一个木偶变量

hosts => "host1,host2"
Run Code Online (Sandbox Code Playgroud)

我提供给bash脚本的

HOSTS=<%= hosts %>
Run Code Online (Sandbox Code Playgroud)

显然这对红宝石不太有用 - 我需要它的格式

hosts = ["host1","host2"]
Run Code Online (Sandbox Code Playgroud)

以来

p hosts
Run Code Online (Sandbox Code Playgroud)

和

puts my_array.inspect
Run Code Online (Sandbox Code Playgroud)

提供输出

["host1","host2"]
Run Code Online (Sandbox Code Playgroud)

我希望使用其中一个.不幸的是,我不能为我的生活弄清楚如何使这项工作.我尝试了以下各项:

<% p hosts %>
<% puts hosts.inspect %>
Run Code Online (Sandbox Code Playgroud)

我找到了他们表示我需要在函数调用前放置"function_"的地方......这似乎不起作用.我已经确定了一个迭代模型:

[<% hosts.each do |host| -%>"<%=host%>",<% end -%>]
Run Code Online (Sandbox Code Playgroud)

这是有效的,给我

["host1","host2",]
Run Code Online (Sandbox Code Playgroud)

但尾随的逗号感觉很草率.整件事感到草率.有没有人有更好的方法?或者我是最好的选择?

Ale*_*tin 5

我已经通过以下方式解决了(Puppet v3.0.1):

{
    "your_key1": {
        "your_key2": [<% puppet_var.join('", "').each do |val| %>"<%= val %>"<% end -%>]
    }
}
Run Code Online (Sandbox Code Playgroud)

如果$ puppet_var是一个[[a],“ b”]的数组,则输出应类似于:

{
    "your_key1": {
        "your_key2": ["a", "b"]
    }
}
Run Code Online (Sandbox Code Playgroud)


num*_*407 0

使用to_json;

hosts.to_json
=> "[\"host1\",\"host2\"]"
Run Code Online (Sandbox Code Playgroud)