Fantoche - Modelo

Templatingé um método de obter as coisas em um formato padrão, que pode ser usado em vários locais. No Puppet, modelos e modelos são suportados usando erb que vem como parte da biblioteca Ruby padrão, que pode ser usada em outros projetos além do Ruby, como em projetos Ruby on Rails. Como prática padrão, é necessário ter um conhecimento básico de Ruby. A modelagem é muito útil quando o usuário está tentando gerenciar o conteúdo de um arquivo de modelo. Os modelos desempenham um papel fundamental quando as configurações não podem ser gerenciadas por um tipo de Puppet integrado.

Avaliando Modelos

Os modelos são avaliados usando funções simples.

$value = template ("testtemplate.erb")

Pode-se especificar o caminho completo de um modelo ou pode-se puxar todos os modelos no templatedir do Puppet, que normalmente está localizado em / var / puppet / templates. Pode-se encontrar a localização do diretório executando o puppet –-configprint templatedir.

Os modelos são sempre avaliados pelo analisador, não pelo cliente, o que significa que se alguém estiver usando o puppetmasterd, então o modelo só precisa estar no servidor e nunca será necessário baixá-los para o cliente. Não há diferença em como o cliente vê entre usar um modelo e especificar todo o conteúdo de um arquivo como uma string. Isso indica claramente que as variáveis ​​específicas do cliente são aprendidas primeiro pelo puppetmasterd durante a fase de inicialização do fantoche.

Usando modelos

A seguir está um exemplo de geração da configuração do tomcat para sites de teste.

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 seguir está a definição do modelo.

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

Isso empurra cada arquivo de modelo em um arquivo separado e então é necessário apenas dizer ao Apache para carregar esses arquivos de configuração.

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

Combinando Modelos

Dois modelos podem ser facilmente combinados usando o seguinte comando.

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

Iteração em modelos

O template Puppet também suporta iteração de array. Se a variável que se está acessando for um array, então é possível iterar sobre ele.

$values = [val1, val2, otherval]

Podemos ter modelos como o seguinte.

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

O comando acima produzirá o seguinte resultado.

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

Condições em modelos

o erba modelagem oferece suporte a condicionais. A construção a seguir é uma maneira rápida e fácil de colocar condicionalmente um conteúdo em um arquivo.

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

Modelos e variáveis

Pode-se usar modelos para preencher variáveis, além de preencher o conteúdo do arquivo.

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

Variável indefinida

Se for necessário verificar se a variável está definida antes de usá-la, o seguinte comando funciona.

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

Variável fora do escopo

Pode-se procurar variáveis ​​fora do escopo explicitamente com a função lookupvar.

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

Modelo de Projeto de Amostra

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