Марионетка - Шаблон

Templatingэто метод получения вещей в стандартном формате, который можно использовать в нескольких местах. В Puppet шаблоны и шаблоны поддерживаются с помощью erb, который входит в состав стандартной библиотеки Ruby, которую можно использовать в других проектах, кроме Ruby, например, в проектах Ruby on Rails. Как правило, нужно иметь базовое понимание Ruby. Шаблоны очень полезны, когда пользователь пытается управлять содержимым файла шаблона. Шаблоны играют ключевую роль, когда конфигурациями нельзя управлять с помощью встроенного типа Puppet.

Оценка шаблонов

Шаблоны оцениваются с помощью простых функций.

$value = template ("testtemplate.erb")

Можно указать полный путь к шаблону или можно вытащить все шаблоны из шаблона Puppet templatedir, который обычно находится в / var / puppet / templates. Местоположение каталога можно найти, запустив шаблон puppet –-configprint templatedir.

Шаблоны всегда оцениваются парсером, а не клиентом, что означает, что если используется puppetmasterd, то шаблон должен быть только на сервере, и их никогда не нужно загружать на клиент. Нет никакой разницы в том, как клиент видит между использованием шаблона и указанием всего содержимого файла в виде строки. Это ясно указывает на то, что переменные, зависящие от клиента, сначала изучаются puppetmasterd на этапе запуска марионетки.

Использование шаблонов

Ниже приведен пример создания конфигурации 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.

<%= scope.lookupvar('apache::user') %>

Образец шаблона проекта

<#Autogenerated by puppet. Do not edit. 
[default] 
#Default priority (lower value means higher priority) 
priority = <%= @priority %> 
#Different types of backup. Will be done in the same order as specified here. 
#Valid options: rdiff-backup, mysql, command 
backups = <% if @backup_rdiff %>rdiff-backup, 
<% end %><% if @backup_mysql %>mysql, 
<% end %><% if @backup_command %>command<% end %> 
<% if @backup_rdiff -%>  

[rdiff-backup]  

<% if @rdiff_global_exclude_file -%> 
   global-exclude-file = <%= @rdiff_global_exclude_file %> 
<% end -%> 
   <% if @rdiff_user -%> 
      user = <%= @rdiff_user %> 
<% end -%> 
<% if @rdiff_path -%> 
   path = <%= @rdiff_path %> 
<% end -%>  

#Optional extra parameters for rdiff-backup  

extra-parameters = <%= @rdiff_extra_parameters %>  

#How long backups are going to be kept 
keep = <%= @rdiff_keep %> 
<% end -%> 
<% if @backup_mysql -%>%= scope.lookupvar('apache::user') %>  

[mysql]  

#ssh user to connect for running the backup 
sshuser =  <%= @mysql_sshuser %>

#ssh private key to be used 
   sshkey = <%= @backup_home %>/<%= @mysql_sshkey %> 
   <% end -%> 
<% if @backup_command -%>  
[command] 

#Run a specific command on the backup server after the backup has finished  

command = <%= @command_to_execute %> 
<% end -%>