2016-06-21 4 views
0

Ich habe Probleme beim Versuch, Informationen von einer Standardattributdatei in eine Vorlage mit Chef zu bekommen. Derzeit habe ich folgendes:Ich versuche, Attribute in einem Chefvorlage zu verwenden

# attributes/default.rb 
default['environment']['extrahosts'] = [ 'hostname1:address1', 'hostname2:address2' ] 

#recipes/default.rb 
extra_hosts = node[:environment][:extrahosts] 

... 
... 
template '/blahblah' do 
    source 'blahblah.erb' 
    variables(:extra_hosts => extra_hosts) 
end 

#templates/blahblah.erb 
<% for @item in @extra_hosts %> 
    - <%= @item %> 
<% end %> 

Obwohl dies nicht funktioniert. Was ich meine Vorlage hinzufügen zu ergeben:

- hostname1:address1 
    - hostname2:address2 

Antwort

1

Die Art und Weise eine Schleife in Ruby schreiben ist die each Methode und einen Block zu verwenden.

<% @extra_hosts.each do |item| %> 
    - <%= item %> 
<% end %> 

Beachten Sie auch, dass die Schleife Variable nicht die At-Zeichen, weil es keine Instanz variabel ist.

+0

Danke für Ihre schnelle Antwort. :) Das funktioniert. Es funktioniert jedoch nur, wenn ich Folgendes hinzufüge: <% node [: environment] [: extrahosts] .each do | item | %> Es scheint wie meine Zeile in der Rezeptur von: extra_hosts = Knoten [: Umgebung] [: extrahosts] ... funktioniert nicht, um den Inhalt der Attribute zu nehmen und sie als ein Array? Meine Vorlagen Abschnitt liest: template ‚/ blahblah‘ Quelle tun ‚blahblah.erb‘ Variablen (: extra_hosts => extra_hosts) Ende –

+0

Was Sie haben, ist richtig Gesamt (obwohl doppelte Überprüfung auf Tippfehler), aber wenn Sie sind Wenn Sie das Knotenattribut über eine Converge-Time-Trickserie setzen, kann dies zu Problemen führen. – coderanger

+0

Sie können den Wert von 'extra_hosts' in Ihrem Rezeptcode über eine Protokollressource protokollieren. – coderanger