Назад | Перейти на главную страницу

Файлы Chef / ruby ​​/ erb - как работает этот пример кода?

Я работаю над настраиваемым шаблоном начальной загрузки на основе образца шаблона. Я смотрю на пример получения ключа проверки с рабочей станции на новый сервер, и, насколько я могу судить, путь ключа указан в Knight.rb в переменной validation_key. И в шаблоне начальной загрузки он отображается с помощью <% = validation_key%>

Это волшебный рубиновый материал, обрабатывается ли переменная пути validation_key в Knife, и содержимое считывается в другую переменную при обработке шаблона, и именно так путь превращается в строку, содержащую содержимое файла по этому пути?

Если я объявлю foo = / tmp / test.txt в Knife.rb, могу ли я получить доступ к содержимому test.txt в моем шаблоне начальной загрузки с помощью <% = foo%>?

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

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

В <% и %> бизнес является частью Система шаблонов Ruby также используется Chef. Ссылка на validation_key - это локальная переменная, передаваемая кодом шаблона начальной загрузки.

Более распространенное использование шаблонов ERB в Chef - создание файлов конфигурации, например, из поваренной книги сообщества Apache:

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, по сравнению с <%= который возвращает результат выражения, обычно просто переменной.