Marionnette - Modèle
Templatingest une méthode pour obtenir des éléments dans un format standard, qui peut être utilisé à plusieurs endroits. Dans Puppet, la création de modèles et les modèles sont pris en charge à l'aide d'erb qui fait partie de la bibliothèque Ruby standard, qui peut être utilisée sur d'autres projets en dehors de Ruby, comme dans les projets Ruby on Rails. En tant que pratique standard, il faut avoir une compréhension de base de Ruby. La création de modèles est très utile lorsque l'utilisateur tente de gérer le contenu d'un fichier modèle. Les modèles jouent un rôle clé lorsque les configurations ne peuvent pas être gérées par un type Puppet intégré.
Évaluation des modèles
Les modèles sont évalués à l'aide de fonctions simples.
$value = template ("testtemplate.erb")
On peut spécifier le chemin complet d'un modèle ou on peut extraire tous les modèles dans templatedir de Puppet, qui se trouve généralement dans / var / puppet / templates. On peut trouver l'emplacement du répertoire en exécutant le puppet –-configprint templatedir.
Les modèles sont toujours évalués par l'analyseur, et non par le client, ce qui signifie que si l'on utilise puppetmasterd, alors le modèle doit seulement être sur le serveur et on n'a jamais besoin de les télécharger sur le client. Il n'y a aucune différence sur la façon dont le client voit entre l'utilisation d'un modèle et la spécification de tout le contenu d'un fichier sous forme de chaîne. Cela indique clairement que les variables spécifiques au client sont apprises en premier par puppetmasterd pendant la phase de démarrage de la marionnette.
Utilisation de modèles
Voici un exemple de génération de la configuration tomcat pour les sites de test.
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"
}
}
Voici la définition du modèle.
<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>
Cela pousse chaque fichier de modèle dans un fichier séparé et il suffit alors de dire à Apache de charger ces fichiers de configuration.
Include /etc/apache2/trac/[^.#]*
Combinaison de modèles
Deux modèles peuvent être facilement combinés à l'aide de la commande suivante.
template('/path/to/template1','/path/to/template2')
Itération dans les modèles
Le modèle Puppet prend également en charge l'itération de tableau. Si la variable à laquelle on accède est un tableau, on peut l'itérer.
$values = [val1, val2, otherval]
Nous pouvons avoir des modèles comme celui-ci.
<% values.each do |val| -%>
Some stuff with <%= val %>
<% end -%>
La commande ci-dessus produira le résultat suivant.
Some stuff with val1
Some stuff with val2
Some stuff with otherval
Conditions dans les modèles
le erbla création de modèles prend en charge les conditions. La construction suivante est un moyen rapide et facile de placer conditionnellement un contenu dans un fichier.
<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>
Modèles et variables
On peut utiliser des modèles pour remplir des variables en plus de remplir le contenu du fichier.
testvariable = template('/var/puppet/template/testvar')
Variable indéfinie
Si l'on a besoin de vérifier si la variable est définie avant de l'utiliser, la commande suivante fonctionne.
<% if has_variable?("myvar") then %>
myvar has <%= myvar %> value
<% end %>
Variable hors de portée
On peut rechercher explicitement une variable hors de portée avec la fonction lookupvar.
<%= scope.lookupvar('apache::user') %>
Exemple de modèle de projet
<#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 -%>