2016-06-21 53 views
0

我嘗試從默認屬性文件中使用Chef將模板信息導入到模板中時遇到問題。目前,我有這個:我想在廚師模板中使用屬性

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

另請注意,循環變量沒有at符號,因爲它不是實例變量。

+0

感謝您的快速回復。 :) 這樣可行。但是,它只適用於我添加: <%node [:environment] [:extrahosts] .each do | item | %> 這似乎是我的線在配方: extra_hosts =節點[:環境] [:extrahosts] ...不工作,取得屬性的內容,並把它們作爲一個數組? 我的模板部分寫着: 模板「/ blahblah」做 源「blahblah.erb」 變量(:extra_hosts => extra_hosts) 結束 –

+0

你有什麼是正確的整體(雖然錯別字仔細檢查),但如果你是通過一些收斂時間的欺騙手段設置節點屬性可能會導致問題。 – coderanger

+0

您可以通過日誌資源在配方代碼中記錄'extra_hosts'的值。 – coderanger