2012-08-10 8 views
5

Używam lalek, aby zapewnić zestaw stałych dla programu ruby. Potrzebuję podać tablicę nazw hostów, nad którymi mój program będzie się sprawdzał.Wyjdź z tablicy rubryk za pomocą szablonu erb

W skrypcie bash używałem przed tym, ja po prostu miałem jako marionetka zmiennej

hosts => "host1,host2" 

które dostarczone do skryptu bash jako

HOSTS=<%= hosts %> 

oczywiście to nie będzie dość pracy Ruby - muszę go w formacie

hosts = ["host1","host2"] 

od

p hosts 

i

puts my_array.inspect 

zapewnić wyświetlamy

["host1","host2"] 

Miałem nadzieję, że do korzystania z jednego z nich. Niestety, nie mogę dla mojego życia wymyślić, jak wykonać tę pracę. Próbowałem każdej z następujących grup:

<% p hosts %> 
<% puts hosts.inspect %> 

znalazłem gdzieś, gdzie wskazano, że muszę umieścić „function_” przed wywołań funkcji ... że nie wydają się działać. Mam rozliczane w modelu iteracyjnego:

[<% hosts.each do |host| -%>"<%=host%>",<% end -%>] 

to działa, dając mi

["host1","host2",] 

ale przecinek spływu czuje się zaniedbany. cała sprawa jest niechlujna. Czy ktoś ma lepszy sposób? Czy jest to, co zrobiłem najlepszą opcją?

Odpowiedz

0

Użyj to_json;

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

Nadal będę musiał zrobić to po przetworzeniu, aby usunąć znaki ucieczki i dodatkowe cytaty, prawda? – Hitch

+0

Nie, uciekli, ponieważ znajdują się w podwójnych cudzysłowach. Tak będzie wyglądać w konsoli. Kiedy wypiszesz go w erbie, wszystko będzie dobrze. – numbers1311407

+0

ah, spoko. Zrobię to zdjęcie i zobaczę, czy to, czego potrzebuję. dzięki! – Hitch

4

mam rozwiązane (Puppet v3.0.1) w ten sposób:

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

Jeśli $ puppet_var jest tablicą jak [ "a", "b"] Wynik powinien wyglądać mniej więcej tak:

{ 
    "your_key1": { 
     "your_key2": ["a", "b"] 
    } 
} 
3

Ruby umożliwia użycie% w shorcut między nawiasami w celu zainicjowania tablic. To zrobi:

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