Puppet - Modello

Templatingè un metodo per ottenere le cose in un formato standard, che può essere utilizzato in più posizioni. In Puppet, templating e template sono supportati usando erb che fa parte della libreria Ruby standard, che può essere usata su altri progetti oltre a Ruby come nei progetti Ruby on Rails. Come pratica standard, è necessario avere una conoscenza di base di Ruby. La creazione di modelli è molto utile quando l'utente cerca di gestire il contenuto di un file modello. I modelli giocano un ruolo chiave quando le configurazioni non possono essere gestite da un tipo Puppet integrato.

Modelli di valutazione

I modelli vengono valutati utilizzando semplici funzioni.

$value = template ("testtemplate.erb")

Si può specificare il percorso completo di un modello o si possono estrarre tutti i modelli nella templatedir di Puppet, che di solito si trova in / var / puppet / templates. È possibile trovare la posizione della directory eseguendo il puppet –-configprint templatedir.

I modelli vengono sempre valutati dal parser, non dal client, il che significa che se si utilizza puppetmasterd, il modello deve essere solo sul server e non è mai necessario scaricarli sul client. Non c'è differenza nel modo in cui il client vede tra l'utilizzo di un modello e la specifica di tutto il contenuto di un file come stringa. Ciò indica chiaramente che le variabili specifiche del cliente vengono apprese per prime da Puppetmasterd durante la fase di avvio del pupazzo.

Utilizzo dei modelli

Di seguito è riportato un esempio di generazione della configurazione Tomcat per i siti di 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" 
   } 
}

Di seguito è riportata la definizione del modello.

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

Questo spinge ogni file modello in un file separato e quindi basta dire ad Apache di caricare questi file di configurazione.

Include /etc/apache2/trac/[^.#]*

Combinazione di modelli

È possibile combinare facilmente due modelli utilizzando il seguente comando.

template('/path/to/template1','/path/to/template2')

Iterazione nei modelli

Il modello Puppet supporta anche l'iterazione dell'array. Se la variabile a cui si accede è un array, è possibile iterare su di esso.

$values = [val1, val2, otherval]

Possiamo avere modelli come i seguenti.

<% values.each do |val| -%> 
Some stuff with <%= val %> 
<% end -%>

Il comando precedente produrrà il seguente risultato.

Some stuff with val1 
Some stuff with val2 
Some stuff with otherval

Condizioni nei modelli

Il erbla creazione di modelli supporta i condizionali. Il seguente costrutto è un modo semplice e veloce per inserire in modo condizionale un contenuto in un file.

<% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %>

Modelli e variabili

È possibile utilizzare modelli per inserire variabili oltre a compilare il contenuto del file.

testvariable = template('/var/puppet/template/testvar')

Variabile non definita

Se è necessario verificare se la variabile è definita prima di utilizzarla, il seguente comando funziona.

<% if has_variable?("myvar") then %> 
myvar has <%= myvar %> value 
<% end %>

Variabile fuori ambito

Si può cercare la variabile fuori ambito esplicitamente con la funzione lookupvar.

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

Modello di progetto di esempio

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