Шаблонирование — это метод получения вещей в стандартном формате, который можно использовать в нескольких местах. В Puppet шаблоны и шаблоны поддерживаются с помощью erb, который входит в состав стандартной библиотеки Ruby, которая может использоваться в других проектах, кроме Ruby, как в проектах Ruby on Rails. Как стандартная практика, нужно иметь базовое понимание Ruby. Шаблонирование очень полезно, когда пользователь пытается управлять содержимым файла шаблона. Шаблоны играют ключевую роль, когда конфигурации не могут управляться встроенным типом Puppet.
Оценка шаблонов
Шаблоны оцениваются с использованием простых функций.
$value = template ("testtemplate.erb")
Можно указать полный путь к шаблону или можно извлечь все шаблоны в шаблонном шаблоне Puppet, который обычно находится в / var / puppet / templates. Найти местоположение каталога можно, запустив puppet –-configprint templatedir.
Шаблоны всегда оцениваются синтаксическим анализатором, а не клиентом, что означает, что если кто-то использует puppetmasterd, то шаблон должен быть только на сервере и никогда не нужно загружать их на клиент. Там нет разницы в том, как клиент видит между использованием шаблона и указанием всего содержимого файла в виде строки. Это ясно указывает на то, что специфичные для клиента переменные сначала изучаются puppetmasterd во время фазы запуска puppet.
Использование шаблонов
Ниже приведен пример создания конфигурации Tomcat для сайтов тестирования.
define testingsite($cgidir, $tracdir) { file { "testing-$name": path => "/etc/tomcat/testing/$name.conf", owner => superuser, group => superuser, mode => 644, require => File[tomcatconf], content => template("testsite.erb"), notify => Service[tomcat] } symlink { "testsym-$name": path => "$cgidir/$name.cgi", ensure => "/usr/share/test/cgi-bin/test.cgi" } }
Ниже приведено определение шаблона.
<Location "/cgi-bin/ <%= name %>.cgi"> SetEnv TEST_ENV "/export/svn/test/<%= name %>" </Location> # You need something like this to authenticate users <Location "/cgi-bin/<%= name %>.cgi/login"> AuthType Basic AuthName "Test" AuthUserFile /etc/tomcat/auth/svn Require valid-user </Location>
Это помещает каждый файл шаблона в отдельный файл, а затем нужно просто сказать Apache, чтобы загрузить эти файлы конфигурации.
Include /etc/apache2/trac/[^.#]*
Объединение шаблонов
Два шаблона могут быть легко объединены с помощью следующей команды.
template('/path/to/template1','/path/to/template2')
Итерация в шаблонах
Шаблон Puppet также поддерживает итерацию массива. Если переменная, к которой вы обращаетесь, является массивом, то ее можно перебрать.
$values = [val1, val2, otherval]
У нас могут быть шаблоны, подобные следующим.
<% values.each do |val| -%> Some stuff with <%= val %> <% end -%>
Приведенная выше команда даст следующий результат.
Some stuff with val1 Some stuff with val2 Some stuff with otherval
Условия в шаблонах
Шаблон erb поддерживает условные выражения . Следующая конструкция — это быстрый и простой способ условного размещения содержимого в файле.
<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>
Шаблоны и Переменные
Можно использовать шаблоны для заполнения переменных в дополнение к заполнению содержимого файла.
testvariable = template('/var/puppet/template/testvar')
Неопределенная переменная
Если нужно проверить, определена ли переменная перед ее использованием, сработает следующая команда.
<% if has_variable?("myvar") then %> myvar has <%= myvar %> value <% end %>
Переменная вне области видимости
Можно явно искать переменную вне области видимости с помощью функции lookupvar.