2016-06-21 20 views
0

シェフを使用して、デフォルトの属性ファイルからテンプレートに情報を取得しようとしています。現在、私はこれを持っています:シェフテンプレートで属性を使用しようとしています

# 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 %> 

これは動作しません。私は何を得て、私のテンプレートに追加します:

- hostname1:address1 
    - hostname2:address2 

答えて

1

あなたはRubyでループを記述方法がeach方法やブロックを使用することです。

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

また、インスタンス変数ではないため、ループ変数にはアットマークが付きません。

+0

ご返信ありがとうございます。 :)それは動作します。しかし、それは私が追加する場合にのみ動作します: <%node [:environment] [:extrahosts] .each do | item | %> extra_hosts = node [:environment] [:extrahosts] ...アトリビュートの内容を取得して配列として入れるのではないのですか? マイテンプレート部分は、読み取ります テンプレート「/ blahblahは」 ソース「blahblah.erb」 変数ん(:extra_hosts => extra_hosts)あなたが持っている何 エンド –

+0

は(タイプミスのためのダブルチェックが)全体的に正しいですが、あなたはしている場合何らかの収束時間を経てノード属性を設定すると、問題が発生する可能性があります。 – coderanger

+0

'extra_hosts'の値をログリソース経由でレシピコードに記録することができます。 – coderanger

関連する問題