2017-03-08 129 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。谢谢 –