Chef / ruby​​ / erb文件 – 这个示例代码是如何工作的?

我正在基于示例模板的自定义引导程序模板。 我正在看从validation密钥从工作站到全新的服务器的例子,从我可以告诉的是在variablesvalidation_key中的knife.rb中指定的关键path。 并在引导模板中使用<%= validation_key%>进行回显

这个魔法是否是ruby的东西,是在knife中处理的validation_keypathvar,在处理模板时,内容被读入到一个不同的var中,那么path是如何变成包含该path上的文件内容的string?

如果我在knife.rb中声明foo = / tmp / test.txt,我可以通过使用<%= foo%>访问引导模板中的test.txt的内容吗?

FROM: https : //github.com/opscode/chef/blob/master/lib/chef/knife/bootstrap/ubuntu12.04-gems.erb

( cat <<'EOP' <%= validation_key %> EOP ) > /tmp/validation.pem 

这个<%%>业务是Chef使用的Ruby模板系统的一部分。 对validation_key的引用是由引导程序模板代码传入的局部variables。

Chef中ERB模板更常见的用法是创buildconfiguration文件,例如Apache社区食谱:

 templates/default/ports.conf.erb <% @apache_listen_ports.each do |port| %> Listen <%= port %> <% end %> 

这个资源将会在一个配方中创build:

 recipes/default.rb template "/etc/apache2/ports.conf" do source "ports.conf.erb" variables :apache_listen_ports => [80, 443] end 

当你第一次开始时,重要的一点是要注意使用<%编写由ERB执行的代码,而<%=返回expression式的结果,通常只是一个variables。