2017-03-08 128 views
0

試圖輸出的與廚師語法

node['a'] = {:b "1" :c "2"} 

通過這樣的內容ERB文件:

a: 
<% a = node['a'] %> 
b: <% a[:b] %> 
c: <% a[:c] %> 
<% end %> 

產生這樣的:

a: 
b: 1 
c: 2 

但不能完全肯定正確的語法對紅寶石,廚師和erb來說這是新鮮事。

+0

您是否正在嘗試爲配置文件生成Yaml? – coderanger

+0

@coderanger是的。謝謝 –

回答

1

好吧,讓我們回過頭來。首先,您通常不希望直接在模板中引用節點屬性。在某些情況下,像從Ohai到來屬性也可以是沒關係,速記,但對於重要的數據我也想通過它在通過variables屬性是這樣的:

template '/etc/whatever.conf' do 
    source 'whatever.conf.erb' 
    variables a: node['a'] 
end 

有了到位,現在,我們已經暴露數據作爲模板變量。第二個改進就是讓Ruby完成生成YAML的繁重工作。我們可以用.to_yaml方法在模板中做到這一點:

<%= @a.to_yaml %> 

這應該是所有你需要的!

+0

感謝您的幫助。不幸的是,它必須通過直接在模板中引用節點屬性來完成。有沒有辦法直接在模板中做到這一點?我認爲我的語法不太正確。再次感謝您的幫助。 –

+0

當然,你可以用同樣的方法做'<%= node ['a']。to_hash.to_yaml%>'但我們不推薦它,因爲它會導致難以維護的食譜。 – coderanger

+0

謝謝,我不完全理解。這是我的.yml.erb文件中的一個例子:d:<%= node ['d']%>(其中node ['d'] ='5'),我需要做類似的事情.yml.erb文件可以讓我取出node ['a'] = {:b「1」:c「2」}的值。我正在努力如何訪問:b和:c。謝謝 –