2012-08-10 12 views
5

Utilizzo burattino per fornire un insieme di costanti per un programma di rubini. Ho bisogno di fornire una serie di nomi host su cui il mio programma itererà.Ruby array in uscita tramite un modello ERB

Nello script bash stavo usando prima di questo, ho semplicemente avuto come burattino variabile

hosts => "host1,host2" 

che ho fornito allo script bash come

HOSTS=<%= hosts %> 

Ovviamente questo lavoro non del tutto per ruby ​​- ho bisogno nel formato

hosts = ["host1","host2"] 

dal

p hosts 

e

puts my_array.inspect 

fornire l'output

["host1","host2"] 

speravo di utilizzare uno di quelli. Purtroppo, non posso per la vita di me capire come fare quel lavoro. Ho provato ciascuna delle seguenti:

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

ho trovato un posto dove hanno indicato che avevo bisogno di mettere "function_" di fronte a chiamate di funzione ... che non sembra funzionare. Ho optato per un modello iterativo:

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

questo funziona, dandomi

["host1","host2",] 

ma la virgola finale si sente trascurato. il tutto si sente sciatto. Qualcuno ha un modo migliore? O è quello che ho fatto l'opzione migliore?

risposta

0

Utilizzare to_json;

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

Avrò ancora bisogno di fare un po 'di post-elaborazione di quello per spogliare i caratteri di fuga e le citazioni extra, non è vero? – Hitch

+0

Nah sono fuggiti perché sono tra virgolette. Questo è come apparirebbe in console. Quando lo pubblichi in ERB andrà bene. – numbers1311407

+0

ah, fantastico. Darò uno scatto e vedrò se fa quello che mi serve. Grazie! – Hitch

4

Ho risolto (Puppet v3.0.1) in questo modo:

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

Se $ puppet_var è un array come [ "a", "b"] di uscita dovrebbe essere simile:

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

Ruby consente l'utilizzo di% w shorcut tra parentesi per inizializzare gli array. Questo farà:

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