image001

O Puppet é uma solução para gerenciamento de configurações que permite a garantia do estado de uma infraestrutura através de uma linguagem declarativa, automatizando todas as etapas do processo de entrega de software, a partir de provisionamento de máquinas físicas e virtuais.

Trabalhando em uma camada de abstração de recursos, onde deve ser informado apenas o que quer que seja feito, não se preocupando com o como, o Puppet se encarrega disso. Um código, vários Sistemas Operacionais.

Compatível com todas as principais plataformas Linux e Unix, Mac OS X e Windows; e sob a licença Apache 2.0, pode ser utilizado de duas formas: stand-alone, onde a execução das configurações é local e agent/master, onde as configurações são distribuídas para todos os agentes, através dos servidores via rede.

Como funciona:

Master / Agent

image003

  • O node possui um agente instalado, que permanece em execução e se conecta ao máster a cada 30 minutos, por padrão.
  • Facts O node envia os fatos contendo sua configuração para o máster
  • Catalog: O node solicita a sua configuração, que é compilada e enviada pelo master.
  • O agente aplica o catálogo no node.
  • Report : O resultado da aplicação do catálogo é reportado ao master opcionalmente, havendo divergências ou não.

Manifesto: As configuração do Puppet são executadas através de manifestos, armazenadas em arquivos com a extensão .pp.

Ex1:
/root/manifests/arquivo.pp
file {'teste':
path => '/tmp/teste.txt',
ensure => present,
mode => 0640,
content => "Conteudo de teste!\n",
}
Ex2:
/etc/puppet/manifests/site.pp
node 'vm1' {
notify {'kernel':
message => "O sistema operacional é ${kernel} e versão ${kernelversion}"
}
package { 'ntp':
ensure => present,
}
service { 'ntpd':
ensure => running,
}
user { 'root':
ensure           => 'present',
comment          => 'root',
gid              => '0',
home             => '/root',
password        => '$6$LQWAl5VJNoh5PtCI$La5NRHMyxl3OO//R9GCN5a8l0TPagn/AVYk6vbs8ufPco21KZppfkW8TMkQ/Df3IYim8Lxds9iTEgHYLs67T
0',
password_max_age => '99999',
password_min_age => '0',
shell            => '/bin/bash',
uid              => '0',
}
service { 'sshd':
ensure => 'running',
enable => 'true',
}
file { '/tmp/test':
ensure => file,
owner  => 'root',
group  => 'root',
mode   => '0600',
}
}

Fatos: O facter é uma ferramenta fundamental do Puppet, com ela podemos gerar a lista de variáveis.

[root@vm1 manifests]# facter
architecture => x86_64
augeasversion => 1.0.0
bios_release_date => 12/01/2006
bios_vendor => innotek GmbH
bios_version => VirtualBox
blockdevice_sda_model => VBOX HARDDISK
blockdevice_sda_size => 66428796928
blockdevice_sda_vendor => ATA
blockdevice_sr0_model => CD-ROM
blockdevice_sr0_size => 1073741312
blockdevice_sr0_vendor => VBOX
blockdevices => sda,sdb,sr0
boardmanufacturer => Oracle Corporation
boardproductname => VirtualBox
boardserialnumber => 0
domain => polimed.dom
facterversion => 2.4.4
filesystems => ext4,iso9660
fqdn => vm1.polimed.dom
gid => root
hardwareisa => x86_64
hardwaremodel => x86_64
. ..

O exemplo abaixo usa algumas das variáveis geradas pelo facter:

notify {'kernel':
message => "O sistema operacional é ${kernel} e versão ${kernelversion}"
}
notify {'distro':
message => "A distribuição é ${operatingsystem} e versão ${operatingsystemrelease}"
}

Condicionais: A linguagem declarativa do Puppet possui mecanismos de condição que funcionam de maneira parecida em relação às linguagens de programação. Mas existem algumas diferenças.

if $is_virtual == 'true' {
notify {'Estamos em uma maquina virtual': }
}
else {
notify {'Estamos em uma máquina real': }
}

Expressões:

Comparação
== (igualdade, sendo que comparação de strings é case-insensitive)
!= (diferente)
< (menor que)
> (maior que)
<= (menor ou igual)
>= (maior ou igual)
=~ (casamento de regex)
!~ (não casamento de regex)
in 
(contém, sendo que comparação de strings é case-sensitive)
Exemplo do operador in:
'bat' in 'batata' # TRUE
'Bat' in 'batata' # FALSE
'bat' in ['bat', 'ate', 'logo'] # TRUE
'bat' in { 'bat' => 'feira', 'ate' => 'fruta'} # TRUE
'bat' in { 'feira' => 'bat', 'fruta' => 'ate' } # FALSE
Case
Além do if, o Puppet fornece a diretiva case.
case $operatingsystem {
centos: { $apache = "httpd" }
redhat: { $apache = "httpd" }
debian: { $apache = "apache2" }
ubuntu: { $apache = "apache2" }
default: { fail("sistema operacional desconhecido") }
}
ackage {'apache':
name => $apache,
ensure => 'latest',
}


Módulos
são a união de um ou vários manifestos, carregados automaticamente em modulepath. Podemos encontrar diversos módulos prontos em https://forge.puppetlabs.com/

Ex:
[root@puppet manifests]# puppet config print modulepath
/etc/puppet/modules:/usr/share/puppet/modules

Classes para o Puppet: uma classe é a junção de vários resources sob um nome, uma unidade. É um bloco de código que pode ser ativado ou desativado.

Definindo uma classe:

class nomedaclasse {
...
}

Dentro do bloco de código da classe podemos colocar qualquer código Puppet, por exemplo:

# arquivo ntp.pp
class ntp {
package { 'ntp':
ensure => installed,
}
service { 'ntpd':
ensure => running,
enable => true,
require => Package['ntp'],
}

Segurança e autenticação: As conexões entre agente e servidor master são realizadas usando o protocolo SSL e, através de certificados, ambos se validam. Assim, o agente sabe que está falando com o servidor correto e o servidor master sabe que está falando com um agente conhecido.

 

Instalação

 

Pré-requisitos

  • Todos os hosts devem se comunicar e ter resolução de nomes ativa.
  • Sincronizar a data/hora de todos os hosts
  • Desabilitar o SELINUX

How-to de Instalação

Referências:

http://docs.puppetlabs.com/guides/install_puppet/install_el.html

https://downloads.puppetlabs.com/windows/?_ga=1.144020535.367475482.1416832634

https://docs.puppetlabs.com/guides/install_puppet/install_windows.html

Configuração do Master    

cd /etc/puppet/
puppet master --genconfig > puppet.conf
*Inserir parâmetros
[master]
server = <nome_master>
certname = <nome_master>
*Comentar
#templatedir = /var/lib/puppet/templates
#masterlog = /var/lib/puppet/log/puppetmaster.log
#manifestdir = /etc/puppet/manifests
#modulepath  = /etc/puppet/modules:/usr/share/puppet/modules
#manifest = /etc/puppet/manifests/site.pp
service puppetmaster start
chkconfig --add puppetmaster
chkconfig puppetmaster on

Configuração do Agent

cd /etc/puppet/
puppet agent --genconfig > puppet.conf
Parâmetros no puppet.conf
[AGENT]
Server = <nome_master>
Certname = <nome_master>

Gerar e aplicar os certificados Puppet

  • Criar certificado no node
puppet agent –test
  •  Lista certificados no master
cert list –all
cert list <nomeCertificado>
  • Listar certificados não importados no master
puppet cert list
  •  Importar certificados

puppet cert sign –all puppet cert sign <nomeCertificado>

 

Usando o PUPPET

image005

  • Definir o estado desejado.
  • Simular as mudanças de configuração antes de aplicar no ambiente de produção.
  • Executar o estado desejado automaticamente.
  • Reportar diferenças do estado atual e o aplicado.

 

Simulação

puppet agent --test –noop
#Retorno
[root@vm1 manifests]# puppet agent --test –noop
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for vm1
Info: Applying configuration version '1438707385'
Notice: O sistema operacional é Linux e versoa 2.6.32
Notice: /Stage[main]/Main/Node[vm1]/Notify[kernel]/message: defined 'message' as 'O sistema operacional é Linux e versoa 2.3
2'
Notice: Finished catalog run in 0.57 seconds
 
puppet parser validate arquivo.pp

O comando puppet parser validate apenas verifica se o manifest está correto.

 

Execução

puppet apply  arquivo.pp #Retorno [root@vm1 manifests]# puppet apply  arquivo.pp Notice: Compiled catalog for vm1.polimed.dom in environment production in 0.10 seconds Notice: /Stage[main]/Main/File[teste]/ensure: created Notice: Finished catalog run in 0.04 seconds [root@vm1 manifests]# puppet agent –t #Retorno [root@vm1 manifests]# puppet agent -t Info: Retrieving pluginfacts Info: Retrieving plugin Info: Loading facts Info: Caching catalog for vm1 Info: Applying configuration version ‘1438707385’ Notice: O sistema operacional é Linux e versoa 2.6.32 Notice: /Stage[main]/Main/Node[vm1]/Notify[kernel]/message: defined ‘message’ as ‘O sistema operacional é Linux e verso2.6.2’ Notice: Finished catalog run in 0.61 seconds [root@vm1 manifests]#

Benefícios

  • Padronização do ambiente a partir de um repositório para gestão da configuração.
  • A Configuração dos manifestos é a Documentação
  • Controle do ambiente
  • Integridade do ambiente
  • Configurações Reutilizáveis
  • Agilidade nas mudanças
  • Ganhos de produtividade e assertividade técnicas
  • Versionamento

 

 

 

Fonte:

https://puppetlabs.com/
http://instruct.com.br/blog/apostila-puppet/

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

CAPTCHA
Change the CAPTCHA codeSpeak the CAPTCHA code