通过erb模板输出ruby数组

时间:2012-08-10 22:17:31

标签: ruby templates erb puppet

我正在使用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",]

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

3 个答案:

答案 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\"]"