Marioneta - Plantilla
Templatinges un método para obtener cosas en un formato estándar, que se puede utilizar en varias ubicaciones. En Puppet, las plantillas y las plantillas son compatibles con erb, que viene como parte de la biblioteca estándar de Ruby, que se puede usar en otros proyectos además de Ruby, como en los proyectos de Ruby on Rails. Como práctica estándar, es necesario tener un conocimiento básico de Ruby. La creación de plantillas es muy útil cuando el usuario intenta administrar el contenido de un archivo de plantilla. Las plantillas juegan un papel clave cuando las configuraciones no pueden ser administradas por un tipo de Marioneta incorporado.
Evaluación de plantillas
Las plantillas se evalúan mediante funciones simples.
$value = template ("testtemplate.erb")
Se puede especificar la ruta completa de una plantilla o se pueden extraer todas las plantillas en el templatedir de Puppet, que generalmente se encuentra en / var / puppet / templates. Se puede encontrar la ubicación del directorio ejecutando el comando puppet –-configprint templatedir.
Las plantillas siempre son evaluadas por el analizador, no por el cliente, lo que significa que si uno está usando puppetmasterd, entonces la plantilla solo necesita estar en el servidor y nunca es necesario descargarlas al cliente. No hay diferencia en cómo ve el cliente entre usar una plantilla y especificar todo el contenido de un archivo como una cadena. Esto indica claramente que las variables específicas del cliente son aprendidas primero por puppetmasterd durante la fase de inicio de la marioneta.
Usar plantillas
A continuación se muestra un ejemplo de cómo generar la configuración de tomcat para los sitios de prueba.
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"
}
}
A continuación se muestra la definición de la plantilla.
<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>
Esto empuja cada archivo de plantilla a un archivo separado y luego es necesario decirle a Apache que cargue estos archivos de configuración.
Include /etc/apache2/trac/[^.#]*
Combinando Plantillas
Se pueden combinar fácilmente dos plantillas con el siguiente comando.
template('/path/to/template1','/path/to/template2')
Iteración en plantillas
La plantilla Puppet también admite la iteración de matrices. Si la variable a la que se accede es una matriz, se puede iterar sobre ella.
$values = [val1, val2, otherval]
Podemos tener plantillas como las siguientes.
<% values.each do |val| -%>
Some stuff with <%= val %>
<% end -%>
El comando anterior producirá el siguiente resultado.
Some stuff with val1
Some stuff with val2
Some stuff with otherval
Condiciones en plantillas
los erbplantillas apoya condicionales. La siguiente construcción es una forma rápida y sencilla de poner condicionalmente un contenido en un archivo.
<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>
Plantillas y variables
Se pueden usar plantillas para completar variables además de completar el contenido del archivo.
testvariable = template('/var/puppet/template/testvar')
Variable indefinida
Si uno necesita verificar si la variable está definida antes de usarla, el siguiente comando funciona.
<% if has_variable?("myvar") then %>
myvar has <%= myvar %> value
<% end %>
Variable fuera de alcance
Se puede buscar una variable fuera de alcance explícitamente con la función lookupvar.
<%= scope.lookupvar('apache::user') %>
Plantilla de proyecto de muestra
<#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 -%>