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 -%>