2012-08-10 33 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(' ') %>}