Skip to content

Puppet

Lançamento da versão 2.4.x da Apostila sobre Puppet

Olá!

Há poucos minutos foi lançada a versão 2.4.0 da apostila sobre Puppet, mantida pela comunidade Puppet-BR.

Vocês podem baixar o PDF final aqui: http://apostila.puppet-br.org

Quem quiser ajudar na edição e atualização da apostila, pode ter acesso ao código fonte e as instruções aqui: https://github.com/puppet-br/apostila-puppet

Bons estudos!

Abraço e fica com Deus. 🙂

Lançamento da versão 2.0.0 da Apostila sobre Puppet

Olá!

A equipe da Instruct produziu uma apostila sobre o básico do Puppet (usando a versão 3.x). A versão 1.0 desta apostila está aqui: http://instruct.com.br/lancamento-apostila-puppet-basico/

Desde Nov/2015, eu estava ajudando Miguel e Guto (ambos da Instruct) a atualizar o conteúdo da apostila para dar suporte ao Puppet 4.x.

Domingo passado (19/06/2016), Miguel (dono da Instruct) cedeu a apostila para a comunidade Puppet-BR e me deu permissão para liderar as edições. Agora a apostila pertence a comunidade e ela servirá para ajudar os novos usuários de Puppet.

Já concluí as edições iniciais e estou lançando a versão 2.0.0 da apostila, que recebeu novos capítulos e teve o conteúdo completamente revisado.

Vocês podem baixar o PDF final aqui: https://github.com/puppet-br/apostila-puppet/releases

Quem quiser ajudar na edição e atualização da apostila, pode ter acesso ao código fonte e instruções aqui: https://github.com/puppet-br/apostila-puppet

Bons estudos!

Abraço e fica com Deus. 🙂

Instalando o PuppetDB e integrando ao PuppetServer e ao PuppetExplorer e PuppetBoard no Ubuntu Server 14.04/16.04, Debian 8, Red Hat 6 e 7 e CentOS 6 e 7

Aviso:

Este tutorial foi escrito para ensinar a montar um servidor Puppet usando os pacotes Puppet-Server e PuppetDB (da PuppetLabs), PuppetExplorer (da Spotify) e PuppetBoard. Este ambiente usa pacotes do Puppet 4.x.

Se você ainda não sabe o que é Puppet, como funciona e para que serve, sugiro parar por aqui e começar a estudar os links que estão nesta página: http://blog.aeciopires.com/primeiros-passos-com-o-puppet

 

Os tutoriais de instalação do Puppet-Server podem ser encontrados nas páginas abaixo. A leitura e implementação deles é requisito para a continuação deste tutorial.

No Debian 8 e Ubuntu Server 14.04/16.04:
http://blog.aeciopires.com/configurando-um-ambiente-puppet

No CentOS 6/7 e Red Hat 6/7:
http://blog.aeciopires.com/configurando-um-ambiente-puppet-2

Instalando o PostgreSQL no PuppetServer

 

Antes de iniciar a instalação do PuppetDB, instale o PostgreSQL 9.5 com os comandos abaixo.

No CentOS/RedHat 6 64 bits:

rpm -ivh --force https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-6-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
yum -y install postgresql95-server postgresql95-contrib
service postgresql-9.5 initdb
chkconfig postgresql-9.5 on 

No CentOS/RedHat 7 64 bits:

rpm -ivh --force https://download.postgresql.org/pub/repos/yum/9.5/redhat/rhel-7-x86_64/pgdg-redhat95-9.5-2.noarch.rpm
yum -y install postgresql95-server postgresql95-contrib
/usr/pgsql-9.5/bin/postgresql95-setup initdb
service postgresql-9.5 start
chkconfig postgresql-9.5 on 

No Debian 8:

su -
echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get -y install postgresql-9.5

No Ubuntu Server 14.04:

sudo su
echo "deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt-get update
apt-get -y install postgresql-9.5

No Ubuntu Server 16.04:

echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
apt update
apt -y install postgresql-9.5

Edite o arquivo /etc/postgresql/9.5/main/pg_hba.conf (no Debian/Ubuntu) ou /var/lib/pgsql/9.5/data/pg_hba.conf (no CentOS/Red Hat) e configure o arquivo como mostrado abaixo.

Antes:

local     all       postgres      peer 
local     all       all          peer 
host     all      127.0.0.1/32  md5 
host     all      ::1/128           md5 

Depois:

local     all       postgres         trust 
local     all       all             trust 
host    all       127.0.0.1/32     trust 
host     all      ::1/128               trust 

 Outro arquivo que precisa ser editado é o /etc/postgresql/9.5/main/postgresql.conf (no Debian/Ubuntu) ou /var/lib/pgsql/9.5/data/postgresql.conf (no CentOS/Red Hat) conforme mostrado abaixo.

Antes:

#listen_addresses = 'localhost'
port = 5432

Depois:

listen_addresses = 'localhost'
port = 5432

 Depois de alterar estes arquivos é preciso reiniciar o PostgreSQL para aplicar as configurações realizadas. Faça isso usando o comando abaixo.

No Debian/Ubuntu:

service postgresql restart

No CentOS/Red Hat:

service postgresql-9.5 restart

Agora crie o banco de dados e usuário para o puppetdb com a sequencia de comandos abaixo.

su postgres
createdb puppetdb
createuser -a -d -E -P puppetdb
exit

Opcionalmente, a instalação do PostgreSQL e a criação do banco de dados, pode ser realizado usando o módulo Puppet puppetlabs-postgresql https://forge.puppetlabs.com/puppetlabs/postgresql.

Fonte:
https://www.postgresql.org/download/linux/ubuntu
https://www.postgresql.org/download/linux/debian
https://www.postgresql.org/download/linux/redhat
http://yum.postgresql.org/repopackages.php

Instalando o PuppetDB no PuppetServer

Assumindo que você já instalou o PuppetServer, o Puppet-Agent e o PostgreSQL usando os tutoriais e comandos indicados nas seções anteriores, instale o PuppetDB com o comando abaixo.

puppet resource package puppetdb ensure=latest

Fonte:
https://docs.puppet.com/puppetdb/4.1/install_from_packages.html

Configurando a integração do PuppetDB com PostgreSQL

No servidor PuppetServer, edite o arquivo /etc/puppetlabs/puppetdb/conf.d/database.ini e altere as seguinte linhas:

[database]
 classname = org.postgresql.Driver
 subprotocol = postgresql
 subname = //localhost:5432/puppetdb
 username = puppetdb
 password = SENHA-DO-USUARIO-PUPPETDB

 

OBS.: A porta padrão do PostgreSQL é 5432/TCP e ela foi configurada na seção anterior.

Agora edite o arquivo /etc/puppetlabs/puppetdb/conf.d/jetty.ini e altere os parâmetros abaixo para deixá-los com os valores mostrados em negrito.

[jetty]
 host = 0.0.0.0
 port = 8080
 ssl-host = 0.0.0.0
 ssl-port = 8081

Execute o comando abaixo para gerar os certificados a serem usados pelo PuppetDB e configurar o arquivo jetty.ini.

puppetdb ssl-setup

Reinicie o PuppetDB com o comando abaixo:

service puppetdb restart

Fonte:

https://docs.puppet.com/puppetdb/latest/configure.html

Configurando a integração do PuppetServer com o PuppetDB

Ainda no servidor PuppetServer, instale o pacote puppetdb-termini com o comando abaixo.

puppet resource package puppetdb-termini ensure=latest

Crie o arquivo /etc/puppetlabs/puppet/puppetdb.conf e adicione o seguinte conteúdo:

[main]
 server_urls = https://puppetserver.domain.com.br:8081

Edite o arquivo /etc/puppetlabs/puppet/puppet.conf e adicione o seguinte conteúdo na seção [master].

storeconfigs = true
storeconfigs_backend = puppetdb
reports = store,puppetdb
reportstore = /var/log/puppetlabs/puppet

Crie o arquivo /etc/puppetlabs/puppet/routes.yaml com o seguinte conteúdo:

---
 master:
   facts:
     terminus: puppetdb
     cache: yaml

Atribua as permissões corretas ao arquivo com o comando abaixo:

chown -R puppet:puppet `puppet config print confdir`

Reinicie o PuppetServer com o comando abaixo:

service puppetserver restart

Os arquivos de log do PuppetDB ficam em: /var/log/puppetlabs/puppetdb/

O PuppetDB ficará acessível em: http://puppetserver.domain.com.br:8080 ou https://puppetserver.domain.com.br:8081

perf-dash-large

OBS.: Se não conseguir acessar a interface web do PuppetDB, verifique se há algum firewall bloqueando a porta.

No CentOS/Red Hat 6, você pode desabilitar o firewall seguindo estas instruções: http://www.cyberciti.biz/faq/fedora-redhat-centos-5-6-disable-firewall

No CentOS/Red Hat 7, você pode desabilitar o firewall seguindo estas instruções: http://www.liquidweb.com/kb/how-to-stop-and-disable-firewalld-on-centos-7

Você também pode precisar desabilitar o SELinux no CentOS/RedHat. Siga estas instruções: http://www.revsys.com/writings/quicktips/turn-off-selinux.html ou http://aruljohn.com/info/centos-selinux/

Fonte:
https://docs.puppet.com/puppetdb/4.1/connect_puppet_master.html

Instalando o PuppetExplorer

Os módulos Puppet de instalação do PuppetExplorer e dependências podem ser instalados no Puppet-Server usando os comandos abaixo.

puppet module install puppetlabs-apache
puppet module install puppetlabs-apt
puppet module install spotify-puppetexplorer 

Agora edite o aquivo /etc/puppetlabs/code/environments/production/manifests/site.pp e adicione o seguinte conteúdo:

node puppetserver.domain.com.br {
   class {'::puppetexplorer':
     vhost_options => {
       rewrites  => [ { rewrite_rule => ['^/api/metrics/v1/mbeans/puppetlabs.puppetdb.query.population:type=default,name=(.*)$  https://puppetserver.domain.com.br:8081/api/metrics/v1/mbeans/puppetlabs.puppetdb.population:name=$1 [R=301,L]'] } ] }
     }
}

Agora execute o comando abaixo.

puppet agent -t

Ao final da instalação, o PuppetExplorer ficará acessível em: https://puppetserver.domain.com.br

events

OBS.: O módulo de instalação do PuppetExplorer foi declarado passando o recurso vhost_options, afim de corrigir um bug no PuppetExplorer devido a uma atualização realizada no PuppetDB. Veja o report em: https://github.com/spotify/puppetexplorer/issues/49 normalmente, o PuppetExplorer deveria ser instalado apenas usando a declaração abaixo no arquivo site.pp.

node puppetserver.domain.com.br {
   include puppetexplorer
 }

Fonte:
https://groups.google.com/forum/#!topic/puppet-users/VDywEgW2Y54
https://forge.puppet.com/spotify/puppetexplorer
https://github.com/spotify/puppetexplorer

Instalando o PuppetBoard

Se você não quiser usar o PuppetExplorer, pode usar o PuppetBoard.

Os módulos Puppet de instalação do PuppetBoard e dependẽncias podem ser instalados no Puppet-Server usando os comandos abaixo.

puppet module install puppetlabs-apache
puppet module install puppetlabs-apt
puppet module install puppet-puppetboard 

Agora edite o aquivo /etc/puppetlabs/code/environments/production/manifests/site.pp e adicione o seguinte conteúdo:

node puppetserver.domain.com.br {
   class {'apache':
     default_vhost    => false,
     server_signature => 'Off',
     server_tokens    => 'Prod',
     trace_enable     => 'Off',
   }

   class { 'apache::mod::ssl':
     ssl_cipher    => 'HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1:!TLSv1.1',
     ssl_protocol  => [ 'all', '-SSLv2', '-SSLv3', '-TLSv1', '-TLSv1.1' ],
   }

   #Configure Apache on this server
   class { 'apache::mod::wsgi':
     wsgi_socket_prefix => '/var/run/wsgi',
   }

   #Configure Puppetboard
   class { 'puppetboard':
     manage_git          => 'latest',
     manage_virtualenv   => 'latest',
     reports_count       => 50
   }->
  python::pip { 'Flask':
    virtualenv => '/srv/puppetboard/virtenv-puppetboard',
  }->
  python::pip { 'Flask-WTF':
    virtualenv => '/srv/puppetboard/virtenv-puppetboard',
  }->
  python::pip { 'WTForms':
    virtualenv => '/srv/puppetboard/virtenv-puppetboard',
  }->
  python::pip { 'pypuppetdb':
    virtualenv => '/srv/puppetboard/virtenv-puppetboard',
  }

   #Configure Access Puppetboard
   class { 'puppetboard::apache::vhost':
     vhost_name => 'puppetserver.domain.com.br',
     port       => 443,
     ssl        => true,
   }
}

Agora execute o comando abaixo.

puppet agent -t

Ao final da instalação, o PuppetBoard ficará acessível em: https://puppetserver.domain.com.br

overview

 

É possível que você enfrente o problema abaixo na instalação do PuppetBoard no CentOS/Red Hat 7.

Erro:

Execution of '/usr/bin/rpm -e python-devel-2.7.5-34.el7.x86_64' returned 1: error: Failed dependencies:
python2-devel is needed by (installed) python-virtualenv-1.10.1-2.el7.noarch
Error: /Stage[main]/Python::Install/Package[python-dev]/ensure: change from 2.7.5-34.el7 to absent failed: Execution of '/usr/bin/rpm -e python-devel-2.7.5-34.el7.x86_64' returned 1: error: Failed dependencies:
python2-devel is needed by (installed) python-virtualenv-1.10.1-2.el7.noarch

Solução:

Edite o arquivo /etc/puppetlabs/code/environments/production/modules/python/manifests/install.pp. Altere todas as ocorrências de:

package { 'python-dev':
ensure => $dev_ensure,
name => $pythondev,
}

Para:

package { 'python-dev':
ensure => present,
#ensure => $dev_ensure,
name => $pythondev,
}

Depois execute:

puppet agent -t

Fonte:
https://forge.puppet.com/puppet/puppetboard

Configurando os Agentes Puppet

Em cada máquina que executa o Puppet-Agent, adicione no arquivo /etc/puppetlabs/puppet/puppet.conf o seguinte conteúdo:

[agent]
 report = true

Reinicie o Puppet-Agent com o comando abaixo:

service puppet restart

Opcional: instalando o PuppetBoard e PuppetExplorer através do projeto PCP

Alguns membros da comunidade Puppet-BR, desenvolveram o projeto PCP que facilita a criação de um servidor PuppetServer, PuppetDB com PuppetExplorer e PuppetBoard em uma VM gerenciada pelo Vagrant.

Para mais informações acesse: https://gitlab.com/puppet-br/pcp

OBS.: O PCP não é recomendado para ser usado em ambientes de produção. É indicado apenas em ambientes de desenvolvimento e testes com Puppet.

Configurando um ambiente Puppet-Server e Puppet-Agent no CentOS 6 e 7/Red Hat 6 e 7

Aviso:

Este tutorial foi atualizado para ensinar a montar o ambiente puppet usando o repositório da PuppetLabs para instalar pacotes do Puppet 4.x.

Se você ainda não sabe o que é Puppet, como funciona e para que serve, sugiro parar por aqui e começar a estudar os links que estão nesta página: http://blog.aeciopires.com/primeiros-passos-com-o-puppet/ ou se quiser instalar o Puppet-Server e o Puppet-Agent no Ubuntu Server 14.04/16.04 ou Debian 8, sugiro ler este tutorial: http://blog.aeciopires.com/configurando-um-ambiente-puppet/

Quando estiver se sentindo seguro no assunto, pode retomar a execução deste tutorial.

Entendendo o ambiente

Continuando… a figura abaixo mostra o ambiente usado para a execução deste tutorial.

arquitetura_puppet

O sistema operacional usado nas máquinas foram: CentOS 6 e 7 64 bits e Red Hat 6 e 7 64 bits. Os comandos mostrados a seguir funcionam nestas duas distribuições GNU/Linux.

Para a implementação do ambiente mostrado acima, foi configurado um servidor DHCP e um servidor DNS. Depois disso, foram criadas três máquinas virtuais para serem usadas pelo Puppet. As configurações de disco, memória e processador para as máquinas virtuais foram:

  • Memória: 768 MB
  • HD: 10 GB
  • Processador: 1 com clock de 2.0 GHz
  • 1 placa de rede

Preparando o ambiente

No servidor DHCP da sua rede, configure um IP e associe-o a cada endereço MAC da placa de rede de cada máquina que será usada.

Exemplos de configuração no arquivo do DHCP no GNU/Linux.

host puppetserver { 
  hardware ethernet 08:00:27:e7:09:48; 
  fixed-address 192.168.0.171; 
 } 
host puppet1 { 
  hardware ethernet 08:00:27:81:d7:5e; 
  fixed-address 192.168.0.172; 
 } 
host puppet2 { 
  hardware ethernet 08:00:27:d0:d9:66; 
  fixed-address 192.168.0.173; 
 }

Exemplos de configuração no arquivo de zona do domínio domain.com.br no Bind9 no GNU/Linux.

puppetserver    IN      A       192.168.0.171 
puppet1         IN      A       192.168.0.172 
puppet2         IN      A       192.168.0.173

Exemplos de configuração no arquivo de zona reversa do domínio domain.com.br no Bind9 no GNU/Linux.

171     IN      PTR     puppetserver.domain.com.br. 
172     IN      PTR     puppet1.domain.com.br. 
173     IN      PTR     puppet2.domain.com.br.

Em cada máquina, configure os nomes de host e de domínio editando os arquivos /etc/hosts, /etc/hostname e /etc/resolv.conf

Exemplos de configuração para cada arquivo

Puppet-Server

/etc/hostname 
 puppetserver.domain.com.br 
/etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.171  puppetserver puppetserver.domain.com.br
192.168.0.172  puppet1 puppet1.domain.com.br
192.168.0.173  puppet2 puppet2.domain.com.br
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER

Puppet-Agent 1

/etc/hostname 
 puppet1.domain.com.br
/etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.171  puppetserver puppetserver.domain.com.br
192.168.0.172  puppet1 puppet1.domain.com.br
192.168.0.173  puppet2 puppet2.domain.com.br
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
/etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER

Puppet-Agent 2

/etc/hostname 
 puppet2.domain.com.br
/etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.171  puppetserver puppetserver.domain.com.br
192.168.0.172  puppet1 puppet1.domain.com.br
192.168.0.173  puppet2 puppet2.domain.com.br
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
 /etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER 

Aviso:
Procure manter a hora do sistema de cada máquina corretamente configurada utilizando NTP, para evitar problemas na assinatura de certificados, entre outros.

A porta 8140/TCP do servidor PuppetServer precisa estar acessível para as demais máquinas.

Para a execução deste tutorial, o firewall foi parado em todas as máquinas com os comandos abaixo.

No CentOS/Red Hat 6:

# service iptables save
# service ip6tables save
# service iptables stop
# service ip6tables stop
# chkconfig iptables off
# chkconfig ip6tables off

No CentOS/Red Hat 7:

systemctl stop firewalld
systemctl disable firewalld

Instalando os pacotes

   Adicionando o repositório da PuppetLabs no CentOS 6/Red Hat 6:

su -
yum install -y https://yum.puppetlabs.com/puppetlabs-release-pc1-el-6.noarch.rpm
    Adicionando o repositório da PuppetLabs no CentOS 7/Red Hat 7:
su -
yum install -y https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
 Na máquina que terá o Puppet-Server, instale os pacotes abaixo.
 
yum install -y puppet-agent puppetserver
export PATH=/opt/puppetlabs/bin:$PATH

  Nas máquinas que terá o Puppet-Agent, instale o pacote abaixo.

yum -y install puppet-agent
export PATH=/opt/puppetlabs/bin:$PATH

Verifique a versão do Puppet com o comando abaixo.

puppet --version

 

Aviso:

Os binários e libs do Puppet 4.x ficam, por padrão, dentro do diretório /opt/puppetlabs/bin.

Os arquivos de configuração ficam, por padrão, dentro do diretório /etc/puppetlabs/.

Configurando os serviços

  No arquivo /etc/puppetlabs/puppet/puppet.conf de cada máquina (Puppet-Agent), adicione as linhas abaixo e mude o intervalo de tempo (em segundos), que o agente se conectará ao server para atualização do catálogo de manifestos.

Exemplo para a máquina puppet1:

[main]
certname = puppet1.domain.com.br
server = puppetserver.domain.com.br
# intervalo em segundos
runinterval = 60 

Exemplo para a máquina puppet2:

[main]
certname = puppet2.domain.com.br
server = puppetserver.domain.com.br
# intervalo em segundos
runinterval = 60

No arquivo /etc/puppetlabs/puppet/puppet.conf da máquina (Puppet-Server), adicione as linhas abaixo.

Exemplo para a máquina puppetserver:

[master]
vardir = /opt/puppetlabs/server/data/puppetserver
logdir = /var/log/puppetlabs/puppetserver
rundir = /var/run/puppetlabs/puppetserver
pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
codedir = /etc/puppetlabs/code

[main]
certname = puppetserver.domain.com.br
server = puppetserver.domain.com.br
#intervalo em segundos
runinterval = 60
strict_variables = true
Altere as configurações de memória do Java a ser usado pelo PuppetServer. Edite o arquivo /etc/sysconfig/puppetserver.
JAVA_ARGS="-Xms256m -Xmx512m"
Com esta configuração, será alocado  512 MB (no máximo) e 256 MB (no mínimo) para  uso exclusivo da JVM (Java Virtual Machine) usada pelo PuppetServer.

Gerando certificados e reiniciando os serviços

Na máquina PuppetServer, gere um certificado e reinicie os serviço com os comandos abaixo.

puppet cert generate puppetserver.domain.com.br
puppet resource service puppetserver ensure=running enable=true

Nas máquinas que possuem o puppet-agent, gere uma solicitação de assinatura de certificado com o comando abaixo.

puppet agent -t

    No servidor Puppet-Server aparecerá a solicitação de assinatura para cada máquina que tem apenas o Puppet-Agent.

puppet cert list 
   "puppet1.domain.com.br" (SHA256) C7:EC:72:6F:82:56:9E:15:C8:42:2D:A7:07:07:B7:B6:AC:41:45:DC:33:BA:09:B5:1A:3D:2C:14:31:32:D7:D4 
   "puppet2.domain.com.br" (SHA256) 49:0D:A2:2B:7E:4B:EE:2E:85:CC:B4:16:F9:C1:56:C8:75:63:0C:EF:C4:0E:96:FA:42:4E:09:32:CB:B2:E1:FF

    Assine cada certificado usando os comandos abaixo.

puppet cert sign puppet1.domain.com.br
puppet cert sign puppet2.domain.com.br

   

Aviso:
As solicitações de assinatura de certificados no Puppet-Server ficam em: /etc/puppetlabs/puppet/ssl/ca/requests/
No Puppet-Agent, os certificados assinados ficam em: /etc/puppetlabs/puppet/ssl/
Se precisar refazer a assinatura de certificados do host puppet-agent é só apagar os arquivos e sub-diretórios que ficam em: /etc/puppetlabs/puppet/ssl/.
Se precisar revogar os certificados assinados de um host cliente (puppet1, por exemplo) no Puppet-Server é só usar o comando: puppet cert clean puppet1.domain.com.br (por exemplo).
O log do puppetserver fica em /var/log/puppetlabs/puppetserver/puppetserver.log e /var/log/puppetlabs/puppetserver/puppetserver-daemon.log
O log do puppet-agent fica em /var/log/messages e /var/log/puppetlabs/puppet

  Agora execute o comando abaixo, em cada máquina (Puppet-Server e Puppet-Agent). Este comando irá iniciar o puppet-agent e habilitá-lo para ser executado após o boot do sistema operacional.

puppet resource service puppet ensure=running enable=true

 

Testando o funcionamento do ambiente

    No servidor PuppetServer, crie o arquivo /etc/puppetlabs/code/environments/production/manifests/site.pp com o conteúdo abaixo.

node "puppet1.domain.com.br" {
  package { 'nmap':
    ensure => present,
  }
}
node "puppet2.domain.com.br" {
  package { 'elinks':
    ensure => present,
  }
}
node "puppetserver.domain.com.br" {
  package { 'tcpdump':
    ensure => present,
  }
}

   Salve o arquivo e execute em todas as máquinas o comando abaixo.

puppet agent -t

  Verifique se pacotes foram realmente instalados conforme a configuração especificada no arquivo site.pp.

  • Na máquina puppet1 deve ser instalado o pacote “nmap”
  • Na máquina puppet2 deve ser instalado o pacote “elinks”
  • Na máquina puppetserver deve ser instalado o pacote “tcpdump”.

Pronto! O ambiente está configurado. Agora é só instalar os módulos e manifestos que você precisa.

Bons estudos!

Fonte:

http://gutocarvalho.net/octopress/2015/08/18/instalando-puppet-4-agent-and-master/

http://blog.aeciopires.com/configurando-um-ambiente-puppet/

http://instruct.com.br/static/apostila-puppet.pdf

http://techarena51.com/index.php/a-simple-way-to-install-and-configure-a-puppet-server-on-linux/

https://puppetlabs.com/blog/puppet-server-bringing-soa-to-a-puppet-master-near-you

https://github.com/puppetlabs/puppet-server/blob/master/documentation/install_from_packages.markdown

https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html

https://docs.puppetlabs.com/puppet/4.2/reference/install_pre.html

https://docs.puppetlabs.com/puppetserver/2.1/install_from_packages.html

https://docs.puppetlabs.com/puppetdb/latest/connect_puppet_master.html

https://docs.puppetlabs.com/puppet/4.2/reference/install_linux.html

https://docs.puppetlabs.com/puppetserver/2.1/configuration.html

Configurando um ambiente Puppet-Server e Puppet-Agent no Debian 8 e Ubuntu Server 14.04/16.04

Aviso:

Este tutorial foi atualizado para ensinar a montar o ambiente puppet usando o repositório da PuppetLabs para instalar pacotes do Puppet 4.x.

Se você ainda não sabe o que é Puppet, como funciona e para que serve, sugiro parar por aqui e começar a estudar os links que estão nesta página: http://blog.aeciopires.com/primeiros-passos-com-o-puppet/ ou se quiser instalar o Puppet-Server e o Puppet-Agent no CentOS/Red Hat 6 e CentOS/Red Hat 7, sugiro ler este tutorial: http://blog.aeciopires.com/configurando-um-ambiente-puppet-2/

Quando estiver se sentindo seguro no assunto, pode retomar a execução deste tutorial.

 

Entendendo o ambiente

Continuando… a figura abaixo mostra o ambiente usado para a execução deste tutorial.

arquitetura_puppet

O sistema operacional usado nas máquinas foram: Ubuntu Server 14.04, Ubuntu Server 16.04 e Debian 8.x (ambos 64 bits e em inglês). Os comandos mostrados a seguir funcionam nestas duas distribuições GNU/Linux.

Para a implementação do ambiente mostrado acima, foi configurado um servidor DHCP e um servidor DNS. Depois disso, foram criadas três máquinas virtuais para serem usadas pelo Puppet. As configurações de disco, memória e processador para as máquinas virtuais foram:

  • Memória: 768 MB
  • HD: 20 GB
  • Processador: 1 com clock de 2.0 GHz
  • 1 placa de rede

Preparando o ambiente

No servidor DHCP da sua rede, configure um IP e associe-o a cada endereço MAC da placa de rede de cada máquina que será usada.

Exemplos de configuração no arquivo do DHCP no GNU/Linux.

host puppetserver { 
  hardware ethernet 08:00:27:e7:09:48; 
  fixed-address 192.168.0.171; 
 } 
host puppet1 { 
  hardware ethernet 08:00:27:81:d7:5e; 
  fixed-address 192.168.0.172; 
 } 
host puppet2 { 
  hardware ethernet 08:00:27:d0:d9:66; 
  fixed-address 192.168.0.173; 
 }

Exemplos de configuração no arquivo de zona do domínio domain.com.br no Bind9 no GNU/Linux.

puppetserver    IN      A       192.168.0.171 
puppet1         IN      A       192.168.0.172 
puppet2         IN      A       192.168.0.173

Exemplos de configuração no arquivo de zona reversa do domínio domain.com.br no Bind9 no GNU/Linux.

171     IN      PTR     puppetserver.domain.com.br. 
172     IN      PTR     puppet1.domain.com.br. 
173     IN      PTR     puppet2.domain.com.br.

Em cada máquina, configure os nomes de host e de domínio editando os arquivos /etc/hosts, /etc/hostname e /etc/resolv.conf

Exemplos de configuração para cada arquivo

PuppetServer

/etc/hostname 
 puppetserver 
/etc/hosts 
 127.0.0.1    localhost 
 192.168.0.171    puppetserver.domain.com.br    puppetserver 
 127.0.0.1    puppetserver.domain.com.br    puppetserver 
/etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER
/etc/network/interfaces 
 auto lo 
 iface lo inet loopback 
 
 auto eth0 
 iface eth0 inet dhcp 

Puppet-Agent 1

/etc/hostname 
 puppet1
/etc/hosts 
 127.0.0.1    localhost 
 192.168.0.172    puppet1.domain.com.br    puppet1
 127.0.0.1    puppet1.domain.com.br    puppet1
/etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER
/etc/network/interfaces 
 auto lo 
 iface lo inet loopback 

 auto eth0 
 iface eth0 inet dhcp 

Puppet-Agent 2

/etc/hostname 
 puppet2
/etc/hosts 
 127.0.0.1    localhost 
 192.168.0.173    puppet2.domain.com.br    puppet2
 127.0.0.1    puppet2.domain.com.br    puppet2
 /etc/resolv.conf 
 domain domain.com.br 
 search domain.com.br 
 nameserver IP-DNS-SERVER
/etc/network/interfaces 
 auto lo 
 iface lo inet loopback 

 auto enp0s3 
 iface enp0s3 inet dhcp 

Aviso:
Procure manter a hora do sistema de cada máquina corretamente configurada utilizando NTP, para evitar problemas na assinatura de certificados, entre outros.

A porta 8140/TCP do servidor PuppetServer precisa estar acessível para as demais máquinas.

Instalando os pacotes

   Adicionando o repositório da PuppetLabs no Debian 8.x:

su -
cd /tmp
wget http://apt.puppetlabs.com/puppetlabs-release-pc1-jessie.deb
dpkg -i  puppetlabs-release-pc1-jessie.deb
apt-get update
   Adicionando o repositório da PuppetLabs no Ubuntu Server 14.04:
sudo su
cd /tmp
wget http://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
dpkg -i puppetlabs-release-pc1-trusty.deb
apt-get update

  Adicionando o repositório da PuppetLabs no Ubuntu Server 16.04:

sudo su
cd /tmp
wget http://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
dpkg -i puppetlabs-release-pc1-xenial.deb
apt-get update
 Na máquina que terá o Puppet-Server, instale os pacotes abaixo.
 
apt-get install -y puppet-agent puppetserver
export PATH=/opt/puppetlabs/bin:$PATH

  Nas máquinas que terá o Puppet-Agent, instale o pacote abaixo.

apt-get -y install puppet-agent
export PATH=/opt/puppetlabs/bin:$PATH

Verifique a versão do Puppet com o comando abaixo.

puppet --version

 

Aviso:

Os binários e libs do Puppet 4.x ficam, por padrão, dentro do diretório /opt/puppetlabs/bin.

Os arquivos de configuração ficam, por padrão, dentro do diretório /etc/puppetlabs/.

Configurando os serviços

  No arquivo /etc/puppetlabs/puppet/puppet.conf de cada máquina (Puppet-Agent), adicione as linhas abaixo e mude o intervalo de tempo (em segundos), que o agente se conectará ao server para atualização do catálogo de manifestos.

Exemplo para a máquina puppet1:

[main]
certname = puppet1.domain.com.br
server = puppetserver.domain.com.br
# intervalo em segundos
runinterval = 60 

Exemplo para a máquina puppet2:

[main]
certname = puppet2.domain.com.br
server = puppetserver.domain.com.br
# intervalo em segundos
runinterval = 60

No arquivo /etc/puppetlabs/puppet/puppet.conf da máquina (Puppet-Server), adicione as linhas abaixo.

Exemplo para a máquina puppetserver:

[master]
vardir = /opt/puppetlabs/server/data/puppetserver
logdir = /var/log/puppetlabs/puppetserver
rundir = /var/run/puppetlabs/puppetserver
pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
codedir = /etc/puppetlabs/code

[main]
certname = puppetserver.domain.com.br
server = puppetserver.domain.com.br
#intervalo em segundos
runinterval = 60
strict_variables = true
Altere as configurações de memória do Java a ser usado pelo PuppetServer. Edite o arquivo /etc/default/puppetserver.
JAVA_ARGS="-Xms256m -Xmx512m"
Com esta configuração, será alocado  512 MB (no máximo) e 256 MB (no mínimo) para  uso exclusivo da JVM (Java Virtual Machine) usada pelo PuppetServer.

Gerando certificados e reiniciando os serviços

Na máquina PuppetServer, gere um certificado e reinicie os serviço com os comandos abaixo.

puppet cert generate puppetserver.domain.com.br
puppet resource service puppetserver ensure=running enable=true

Nas máquinas que possuem o puppet-agent, gere uma solicitação de assinatura de certificado com o comando abaixo.

puppet agent -t

    No servidor Puppet-Server aparecerá a solicitação de assinatura para cada máquina que tem apenas o Puppet-Agent.

puppet cert list 
   "puppet1.domain.com.br" (SHA256) C7:EC:72:6F:82:56:9E:15:C8:42:2D:A7:07:07:B7:B6:AC:41:45:DC:33:BA:09:B5:1A:3D:2C:14:31:32:D7:D4 
   "puppet2.domain.com.br" (SHA256) 49:0D:A2:2B:7E:4B:EE:2E:85:CC:B4:16:F9:C1:56:C8:75:63:0C:EF:C4:0E:96:FA:42:4E:09:32:CB:B2:E1:FF

    Assine cada certificado usando os comandos abaixo.

puppet cert sign puppet1.domain.com.br
puppet cert sign puppet2.domain.com.br

   

Avisos:
As solicitações de assinatura de certificados no Puppet-Server ficam em: /etc/puppetlabs/puppet/ssl/ca/requests/
No Puppet-Agent, os certificados assinados ficam em: /etc/puppetlabs/puppet/ssl/
Se precisar refazer a assinatura de certificados do host puppet-agent é só apagar os arquivos e sub-diretórios que ficam em: /etc/puppetlabs/puppet/ssl/.
Se precisar revogar os certificados assinados de um host cliente (puppet1, por exemplo) no Puppet-Server é só usar o comando: puppet cert clean puppet1.domain.com.br (por exemplo).
O log do puppetserver fica em /var/log/puppetlabs/puppetserver/puppetserver.log e /var/log/puppetlabs/puppetserver/puppetserver-daemon.log
O log do puppet-agent fica em /var/log/syslog e /var/log/puppetlabs/puppet.

  Agora execute o comando abaixo, em cada máquina (Puppet-Server e Puppet-Agent). Este comando irá iniciar o puppet-agent e habilitá-lo para ser executado após o boot do sistema operacional.

puppet resource service puppet ensure=running enable=true

 

Testando o funcionamento do ambiente

    No servidor PuppetServer, crie o arquivo /etc/puppetlabs/code/environments/production/manifests/site.pp com o conteúdo abaixo.

node "puppet1.domain.com.br" {
  package { 'nmap':
    ensure => present,
  }
}
node "puppet2.domain.com.br" {
  package { 'elinks':
    ensure => present,
  }
}
node "puppetserver.domain.com.br" {
  package { 'tcpdump':
    ensure => present,
  }
}

   Salve o arquivo e execute em todas as máquinas o comando abaixo.

puppet agent -t

  Verifique se pacotes foram realmente instalados conforme a configuração especificada no arquivo site.pp.

  • Na máquina puppet1 deve ser instalado o pacote “nmap”
  • Na máquina puppet2 deve ser instalado o pacote “elinks”
  • Na máquina puppetserver deve ser instalado o pacote “tcpdump”.

Pronto! O ambiente está configurado. Agora é só instalar os módulos e manifestos que você precisa.

Bons estudos!

Agradecimento a Guto Carvalho pela revisão e dicas de melhoria do tutorial.

Fonte:

http://gutocarvalho.net/octopress/2015/08/18/instalando-puppet-4-agent-and-master/

https://www.snip2code.com/Snippet/565896/Install-Puppet-4-2-on-Ubuntu-14

http://linoxide.com/linux-how-to/install-puppet-ubuntu-15-04/

http://instruct.com.br/static/apostila-puppet.pdf

http://techarena51.com/index.php/a-simple-way-to-install-and-configure-a-puppet-server-on-linux/

https://puppetlabs.com/blog/puppet-server-bringing-soa-to-a-puppet-master-near-you

https://github.com/puppetlabs/puppet-server/blob/master/documentation/install_from_packages.markdown

http://pt.slideshare.net/PuppetLabs/cmc-presentation-44223836

https://docs.puppetlabs.com/puppet/latest/reference/config_file_main.html

https://docs.puppetlabs.com/puppet/4.2/reference/install_pre.html

https://docs.puppetlabs.com/puppetserver/2.1/install_from_packages.html

https://docs.puppetlabs.com/puppetdb/latest/connect_puppet_master.html

https://docs.puppetlabs.com/puppet/4.2/reference/install_linux.html

https://docs.puppetlabs.com/puppetserver/2.1/configuration.html

Primeiros passos com o Puppet

puppet-labs-logo

Olá!

Estou começando a dar os primeiros passos com o Puppet e quero compartilhar os links que já estudei até aqui e que servem de bússola para quem quer começar a usá-lo também. Esta página será atualizada à medida que eu encontrar mais documentos relevantes.

O que é DevOps? Por que mudar para a cultura DevOps?

O que é Puppet e qual é a sua história?

Documentação para começar a usar o Puppet:

Documentação para desenvolver manifests, classes e módulos no Puppet:

Documentação geral sobre Puppet:

Cursos online e grátis sobre Puppet:

Puppet no Windows:

Livros sobre Puppet:

PuppetExplorer:

Puppetboard:

Foreman:

Ferramentas sugeridas para desenvolver no Puppet:

Git e Github:

Vagrant:

Para tirar dúvidas com usuários mais experientes, recomendo fazer parte da comunidade Puppet-BR http://puppet-br.org/comunidade/

Comparação entre as ferramentas de relatório e monitoramento Puppet.