2012-08-10 32 views
5

我使用puppet为ruby程序提供一组常量。 我需要提供一个我的程序将迭代的主机名数组。通过erb模板输出红宝石数组

在我在此之前使用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",] 

,但后面的逗号感觉马虎。整个事情感觉sl。。有没有人有更好的方法?或者是我做了最好的选择?

回答

0

使用to_json;

hosts.to_json 
=> "[\"host1\",\"host2\"]" 
+0

我仍然需要做一些后处理,去掉转义字符和额外的引号,不是吗? – Hitch 2012-08-10 23:13:50

+0

因为它们在双引号内,所以他们逃脱了。这就是它在控制台中的样子。当你在erb中输出时,它会很好。 – numbers1311407 2012-08-11 14:33:50

+0

啊,很酷。我会给你一个机会,看看它是否符合我的需求。谢谢! – Hitch 2012-08-11 18:29:27

4

我已经解决了(木偶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"] 
    } 
} 
3

Ruby允许在括号之间使用%w shorcut来初始化数组。这将做到:

hosts = %w{<%= hosts.join(' ') %>}