Chef / ruby​​ / erb 文件 - 此示例代码如何工作?

Chef / ruby​​ / erb 文件 - 此示例代码如何工作?

我正在基于示例模板开发自定义引导模板。我正在查看将验证密钥从工作站传输到全新服务器的示例,据我所知,密钥路径是在变量 validation_key 中的 knife.rb 中指定的。在引导模板中,它以 <%= validation_key %> 的形式回显

这是神奇的 ruby​​ 东西吗?validation_key 路径变量是在 Knife 中处理的吗?在处理模板时,内容被读入不同的变量中,这就是路径变成包含该路径处文件内容的字符串的方式吗?

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

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

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

答案1

<%业务%>Ruby 的模板系统Chef 也使用。对的引用validation_key是引导模板代码传入的局部变量。

Chef 中 ERB 模板的一个更常见用途是创建配置文件,例如来自 Apache 社区的 cookbook:

templates/default/ports.conf.erb

<% @apache_listen_ports.each do |port| %>
Listen <%= port %>
<% end %>

该资源将在某个配方中创建:

recipes/default.rb

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

当您刚开始时,重要的是要注意<%编写由 ERB 执行的代码的用途,而不是<%=返回表达式的结果(通常只是一个变量)。

相关内容