5

我正在使用 puppet 为 ruby​​ 程序提供一组常量。我需要提供一组主机名,我的程序将在这些主机名上进行迭代。

在我之前使用的 bash 脚本中,我只是将其作为 puppet 变量

hosts => "host1,host2"

我将其提供给 bash 脚本

HOSTS=<%= hosts %>

显然这对 ruby​​ 不太适用——我需要它的格式

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",]

但尾随的逗号感觉很草率。整个事情感觉马虎。有没有人有更好的方法?还是我所做的最好的选择?

4

3 回答 3

5

我已经通过这种方式解决了(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"]
    }
}
于 2013-04-12T11:10:11.050 回答
3

Ruby 允许使用括号之间的 %w 快捷方式来初始化数组。这将做:

hosts = %w{<%= hosts.join(' ') %>}
于 2013-04-12T11:16:16.133 回答
0

使用to_json

hosts.to_json
=> "[\"host1\",\"host2\"]"
于 2012-08-10T22:22:22.653 回答