<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-br">
		<id>http://wiki.mstech.com.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Edson.rodrigues</id>
		<title>MSTECH wiki - Contribuições do usuário [pt-br]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mstech.com.br/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Edson.rodrigues"/>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php/Especial:Contribui%C3%A7%C3%B5es/Edson.rodrigues"/>
		<updated>2026-05-07T14:18:43Z</updated>
		<subtitle>Contribuições do usuário</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3323</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3323"/>
				<updated>2016-11-14T18:11:42Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat  /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/sysconfig/puppetserver&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot;  &amp;gt; &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devops.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert list&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert sign agente-puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devops-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot;  &amp;gt;&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
# vi site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; &amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devops.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devops.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devops.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devops.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devops-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; &amp;gt;&lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3322</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3322"/>
				<updated>2016-11-14T18:11:04Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;$wgGroupPermissions['*']['edit'] = false;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat  /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/sysconfig/puppetserver&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot;  &amp;gt; &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devops.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert list&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert sign agente-puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devops-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot;  &amp;gt;&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
# vi site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; &amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devops.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devops.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devops.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devops.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devops-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; &amp;gt;&lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3198</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3198"/>
				<updated>2016-11-03T12:37:36Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat  /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/sysconfig/puppetserver&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot;  &amp;gt; &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devops.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert list&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert sign agente-puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devops-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot;  &amp;gt;&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
# vi site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; &amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devops.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devops.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devops.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devops.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devops-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; &amp;gt;&lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3197</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3197"/>
				<updated>2016-11-03T12:35:12Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat  /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/sysconfig/puppetserver&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot;  &amp;gt; &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devops.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert list&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert sign agente-puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devops-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot;  &amp;gt;&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
# vi site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; &amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devops.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devops.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devops.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devops.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devops-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt;&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot;  &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;  &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3196</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3196"/>
				<updated>2016-11-03T12:31:31Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat  /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/sysconfig/puppetserver&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devops.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert list&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert sign agente-puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devops-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vi&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
# vi site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devops.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devops.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devops.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devops.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devops-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;vim&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3195</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3195"/>
				<updated>2016-11-03T12:22:47Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat  /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/sysconfig/puppetserver&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devops.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert list&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet cert sign agente-puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devops-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;cd /etc/puppetlabs/code/environments/production/manifests&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# cat /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devops.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devops.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devops.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devops.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devops-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3194</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3194"/>
				<updated>2016-11-03T12:17:27Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devops.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/sysconfig/puppetserver&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devops.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# puppet cert list&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# puppet cert sign agente-puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devops.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devops-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devops.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;cd /etc/puppetlabs/code/environments/production/manifests&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devops.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devops.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devops.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# cat /etc/hosts&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devops.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devops.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devops.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devops.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devops-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devops-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; &lt;br /&gt;
node 'puppetclient-01.devops.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;# puppet agent -t&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devops.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3193</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3193"/>
				<updated>2016-11-03T12:06:56Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;# vi /etc/puppetlabs/puppet/puppet.conf&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt; [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert list&lt;br /&gt;
&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert sign agente-puppet.mstech.com.br&lt;br /&gt;
&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devopslab.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devopslab.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devopslab.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devopslab.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3192</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3192"/>
				<updated>2016-11-03T12:03:43Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert list&lt;br /&gt;
&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert sign agente-puppet.mstech.com.br&lt;br /&gt;
&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devopslab.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devopslab.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devopslab.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devopslab.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3191</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3191"/>
				<updated>2016-11-03T12:02:47Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert list&lt;br /&gt;
&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert sign agente-puppet.mstech.com.br&lt;br /&gt;
&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devopslab.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devopslab.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devopslab.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devopslab.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
=== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ===&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3190</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3190"/>
				<updated>2016-11-03T12:01:59Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Criação de módulos de configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert list&lt;br /&gt;
&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert sign agente-puppet.mstech.com.br&lt;br /&gt;
&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
=== '''Criação de módulos de configuração''' ===&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devopslab.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devopslab.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devopslab.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devopslab.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
=== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3189</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3189"/>
				<updated>2016-11-03T12:00:15Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert list&lt;br /&gt;
&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert sign agente-puppet.mstech.com.br&lt;br /&gt;
&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
==== '''Criação de módulos de configuração''' ====&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devopslab.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devopslab.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devopslab.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devopslab.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
=== – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, um checklist mesmo.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
 - Checklist&lt;br /&gt;
 - Telnet – Instalar&lt;br /&gt;
 - Openssh – Manter atualizado na última versão.&lt;br /&gt;
 - Gnutils – Manter atualizado na última versão.&lt;br /&gt;
 - Vim – Remover&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER.'''&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
   package { [ 'telnet' ]:&lt;br /&gt;
       ensure     =&amp;gt; present,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'openssh' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'gnutls' ]:&lt;br /&gt;
       ensure     =&amp;gt; latest,&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
   package { [ 'vim' ]:&lt;br /&gt;
       ensure     =&amp;gt; absent,&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
&lt;br /&gt;
Obrigado.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3188</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3188"/>
				<updated>2016-11-03T11:51:53Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert list&lt;br /&gt;
&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert sign agente-puppet.mstech.com.br&lt;br /&gt;
&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
==== '''Criação de módulos de configuração''' ====&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devopslab.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devopslab.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devopslab.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devopslab.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
=== 6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes ===&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3187</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3187"/>
				<updated>2016-11-03T11:46:52Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Laboratório.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br  agente-puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “agente-puppet.mstech.com.br”.&lt;br /&gt;
Faça o login no host cliente (agente-puppet.mstech.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edite o puppet.conf e aponte para o Puppet Server.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert list&lt;br /&gt;
&lt;br /&gt;
&amp;quot;agente-puppet.mstech.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet cert sign agente-puppet.mstech.com.br&lt;br /&gt;
&lt;br /&gt;
Notice: Signed certificate request for agente-puppet.mstech.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest agente-puppet.mstech.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/agente-puppet.mstech.com.br.pem'&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
==== '''Criação de módulos de configuração''' ====&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; &amp;gt;&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.mstech.com.br',&lt;br /&gt;
'puppetclient-02.mstech.com.br',&lt;br /&gt;
'puppetclient-03.mstech.com.br',&lt;br /&gt;
'puppetclient-04.mstech.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
        # adicione aqui outros modulo criados&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
192.168.13.42    agente-puppet.mstech.com.br    agente-puppet&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br           puppet&lt;br /&gt;
10.0.10.10       crm.devopslab.com.br           # Adicionado via Puppet&lt;br /&gt;
10.0.10.11       portal.devopslab.com.br        # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       wiki.devopslab.com.br          # Adicionado via Puppet&lt;br /&gt;
10.0.10.13       webmail.devopslab.com.br       # Adicionado via Puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
==== 6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes =====&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3186</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3186"/>
				<updated>2016-11-03T09:40:37Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Instalação e configuração do Cliente */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
# yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
# source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
# puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
==== '''Criação de módulos de configuração''' ====&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
# puppet parser validate hosts.pp&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
# vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
# vi pacotes.pp&lt;br /&gt;
&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
# vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3185</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3185"/>
				<updated>2016-11-03T09:37:02Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Módulo 1 – Edição do arquivo /etc/hosts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
==== '''Criação de módulos de configuração''' ====&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada.&lt;br /&gt;
&lt;br /&gt;
'''No PUPPET SERVER'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# puppet module generate&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
# puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
# vi hosts.pp&lt;br /&gt;
&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3184</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3184"/>
				<updated>2016-11-03T09:32:58Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Criação de módulos de configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
==== '''Criação de módulos de configuração''' ====&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3177</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3177"/>
				<updated>2016-11-01T18:23:41Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Puppet Server ===&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Instalação e configuração do Cliente ===&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
==== Criação de módulos de configuração ====&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3176</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3176"/>
				<updated>2016-11-01T18:19:22Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
=== Infraestrutura do ambiente ===&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
==== Pré-requisitos ====&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==== Instalação dos repositórios ====&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Instalação e configuração do Puppet Server ====&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&lt;br /&gt;
 [agent]&lt;br /&gt;
 server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppet.service&lt;br /&gt;
# systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Instalação e configuração do Cliente&lt;br /&gt;
&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
&lt;br /&gt;
==== Criação de módulos de configuração ====&lt;br /&gt;
===== Módulo 1 – Edição do arquivo /etc/hosts =====&lt;br /&gt;
&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3175</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3175"/>
				<updated>2016-11-01T18:07:56Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
'''1. Infraestrutura do ambiente'''&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
'''2. Pré-requisitos'''&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'''3. Instalação dos repositórios'''&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. Instalação e configuração do Puppet Server'''&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
#systemctl start puppet.service&lt;br /&gt;
#systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; &amp;gt;&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Libere a porta 8140/tcp no Firewall&lt;br /&gt;
firewall-cmd --permanent --add-port=8140/tcp&lt;br /&gt;
systemctl reload firewalld&lt;br /&gt;
5. Instalação e configuração do Cliente&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
6. Criação de módulos de configuração&lt;br /&gt;
6.1 – Módulo 1 – Edição do arquivo /etc/hosts&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3174</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3174"/>
				<updated>2016-11-01T18:04:56Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.'''&lt;br /&gt;
&lt;br /&gt;
'''''Introdução.'''''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
'''1. Infraestrutura do ambiente'''&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
'''2. Pré-requisitos'''&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'''3. Instalação dos repositórios'''&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. Instalação e configuração do Puppet Server'''&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#systemctl start puppet.service&lt;br /&gt;
#systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
Libere a porta 8140/tcp no Firewall&lt;br /&gt;
firewall-cmd --permanent --add-port=8140/tcp&lt;br /&gt;
systemctl reload firewalld&lt;br /&gt;
5. Instalação e configuração do Cliente&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
6. Criação de módulos de configuração&lt;br /&gt;
6.1 – Módulo 1 – Edição do arquivo /etc/hosts&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3173</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3173"/>
				<updated>2016-11-01T18:04:16Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.&lt;br /&gt;
Introdução.'''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
'''1. Infraestrutura do ambiente'''&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
'''2. Pré-requisitos'''&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'''3. Instalação dos repositórios'''&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. Instalação e configuração do Puppet Server'''&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppet.mstech.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#systemctl start puppet.service&lt;br /&gt;
#systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
Libere a porta 8140/tcp no Firewall&lt;br /&gt;
firewall-cmd --permanent --add-port=8140/tcp&lt;br /&gt;
systemctl reload firewalld&lt;br /&gt;
5. Instalação e configuração do Cliente&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
6. Criação de módulos de configuração&lt;br /&gt;
6.1 – Módulo 1 – Edição do arquivo /etc/hosts&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3172</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3172"/>
				<updated>2016-11-01T18:00:27Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.&lt;br /&gt;
Introdução.'''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
'''1. Infraestrutura do ambiente'''&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
'''2. Pré-requisitos'''&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'''3. Instalação dos repositórios'''&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. Instalação e configuração do Puppet Server'''&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#systemctl start puppet.service&lt;br /&gt;
#systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
Libere a porta 8140/tcp no Firewall&lt;br /&gt;
firewall-cmd --permanent --add-port=8140/tcp&lt;br /&gt;
systemctl reload firewalld&lt;br /&gt;
5. Instalação e configuração do Cliente&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
6. Criação de módulos de configuração&lt;br /&gt;
6.1 – Módulo 1 – Edição do arquivo /etc/hosts&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3171</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3171"/>
				<updated>2016-11-01T17:59:22Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.&lt;br /&gt;
Introdução.'''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
'''1. Infraestrutura do ambiente'''&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
'''2. Pré-requisitos'''&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'''3. Instalação dos repositórios'''&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. Instalação e configuração do Puppet Server'''&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
'''Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/'''&lt;br /&gt;
&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# vi /etc/sysconfig/puppetserver&lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# systemctl start puppetserver.service&lt;br /&gt;
# systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#systemctl start puppet.service&lt;br /&gt;
#systemctl enable puppet.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Gere o certificado SSL do agente.'''&lt;br /&gt;
&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
Libere a porta 8140/tcp no Firewall&lt;br /&gt;
firewall-cmd --permanent --add-port=8140/tcp&lt;br /&gt;
systemctl reload firewalld&lt;br /&gt;
5. Instalação e configuração do Cliente&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
6. Criação de módulos de configuração&lt;br /&gt;
6.1 – Módulo 1 – Edição do arquivo /etc/hosts&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3170</id>
		<title>Puppet</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Puppet&amp;diff=3170"/>
				<updated>2016-11-01T17:54:17Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: Criou página com ' == Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==  '''Neste tutorial nós vamos instalar e configurar o Puppet Server,...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Puppet – Como instalar e configurar o Puppet Server, Puppet Cliente e Módulos de Configuração ==&lt;br /&gt;
&lt;br /&gt;
'''Neste tutorial nós vamos instalar e configurar o Puppet Server, instalar o Puppet nos clientes e criar os módulos de configuração do Puppet.&lt;br /&gt;
Introdução.'''&lt;br /&gt;
&lt;br /&gt;
O Puppet é uma ferramenta que permite a gerência e configuração de arquivos ou aplicações, na prática isto quer dizer que você consegue manter seu parque de hosts (desktops e servidores) com arquivos de configuração padronizados, pacotes e aplicativos atualizados, permite a gestão de usuários, monitoração de aplicações, aplicação de mudanças no ambiente de forma rápida e instalação de Sistema Operacional de forma automatizada.&lt;br /&gt;
&lt;br /&gt;
Puppet também faz Orquestração, ou seja você consegue executar comandos em vários servidores ao mesmo tempo, por exemplo saiu um bug e você precisa atualizar um pacote rapidamente, com a Orquestração do Puppet isto é fácil e rápido, não importa o número de hosts, isto se tornará trivial.&lt;br /&gt;
&lt;br /&gt;
Puppet conta também com o Facter, que permite colher qualquer informação dos hosts, como detalhes do hardware e software instalados, ele atua como uma “ferramenta de inventário”.&lt;br /&gt;
A comunidade do Puppet é gigantesca, conta com grande quantidade de contribuições, muitos plug-ins, módulos, vasta documentação e inúmeras listas e sites de discussão.&lt;br /&gt;
&lt;br /&gt;
Vamos lá.&lt;br /&gt;
&lt;br /&gt;
'''1. Infraestrutura do ambiente'''&lt;br /&gt;
&lt;br /&gt;
Tenha pelo menos 1 VM para o Puppet Master 1 VM para ser o cliente.&lt;br /&gt;
&lt;br /&gt;
Utilizado neste Lab.&lt;br /&gt;
Sistema Operacional Centos 7 64 bits – instalação mínima e atualizada.&lt;br /&gt;
1 x Puppet Server (Puppet Master) – puppet.mstech.com.br (192.168.13.42)&lt;br /&gt;
1 x Puppet Client – agente-puppet.mstech.com.br (192.168.11.11)&lt;br /&gt;
&lt;br /&gt;
'''2. Pré-requisitos'''&lt;br /&gt;
&lt;br /&gt;
Todos os servidores e clientes devem estar com o hostname padronizado da seguinte forma: nome_hostname.dominio.com.br nome_hostname.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#cat  /etc/hosts&lt;br /&gt;
192.168.11.11    puppet.mstech.com.br    puppet&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'''3. Instalação dos repositórios'''&lt;br /&gt;
&lt;br /&gt;
Instalar o repositório puppet tanto no Puppet Server como nos clientes.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Para outras Versões de Centos/Red-Hat, Debian/Ubuntu, Suse consulte: http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html&lt;br /&gt;
&lt;br /&gt;
'''4. Instalação e configuração do Puppet Server'''&lt;br /&gt;
&lt;br /&gt;
Junto do pacote puppetserver, também será instalado o puppetclient.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
# yum install puppetserver&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
Por padrão o Puppet vem com o JVM (java) configurado para subir utilizando 2GB RAM, que é o mínimo recomendado, porém se o seu servidor não dispor desta memória, altere a configuração da JVM conforme a sua necessidade.&lt;br /&gt;
Adicional: Dê uma olhada no tópico Tuning do Puppet http://devopslab.com.br/tuning-do-puppet-server/&lt;br /&gt;
Altere a linha “JAVA_ARGS”.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#vi /etc/sysconfig/puppetserver&lt;br /&gt;
 &lt;br /&gt;
JAVA_ARGS=&amp;quot;-Xms1g –Xmx1g -XX:MaxPermSize=256m&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inicie o Puppet server e habilite o startup automático.'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
#systemctl start puppetserver.service&lt;br /&gt;
#systemctl enable puppetserver.service&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Configure o puppet agente.'''&lt;br /&gt;
&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Inicie e ative o Puppet Agent.&lt;br /&gt;
#systemctl start puppet.service&lt;br /&gt;
#systemctl enable puppet.service&lt;br /&gt;
Gere o certificado SSL do agente.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetserver-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455913339'&lt;br /&gt;
Info: Creating state file /opt/puppetlabs/puppet/cache/state/state.yaml&lt;br /&gt;
Notice: Applied catalog in 0.01 seconds&lt;br /&gt;
Libere a porta 8140/tcp no Firewall&lt;br /&gt;
firewall-cmd --permanent --add-port=8140/tcp&lt;br /&gt;
systemctl reload firewalld&lt;br /&gt;
5. Instalação e configuração do Cliente&lt;br /&gt;
Aqui vamos instalar o puppet no cliente “puppetclient-01.devopslab.com.br”.&lt;br /&gt;
Faça o login no host cliente (puppetclient-01.devopslab.com.br) e instale o repositório e o Puppet agent.&lt;br /&gt;
#rpm -hiv https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm&lt;br /&gt;
 &lt;br /&gt;
#yum -y install puppet-agent&lt;br /&gt;
Não inicie o puppet ainda.&lt;br /&gt;
Carregue o PATH do puppet para incluir os comandos do puppet. Isto deveria ser automático e acontece apenas neste versão, possívelmente será corrigido em novas versões do puppet cliente.&lt;br /&gt;
#source  /etc/profile.d/puppet-agent.sh&lt;br /&gt;
Edite o puppet.conf e aponte para o server Puppet Server.&lt;br /&gt;
#vi /etc/puppetlabs/puppet/puppet.conf&lt;br /&gt;
 &lt;br /&gt;
[agent]&lt;br /&gt;
server = puppetserver-01.devopslab.com.br&lt;br /&gt;
Agora inicie e ative o startup automático do Puppet agent.&lt;br /&gt;
systemctl enable puppet.service&lt;br /&gt;
systemctl start puppet.service&lt;br /&gt;
Rode o puppet pela primeira vez.&lt;br /&gt;
#puppet agent -t&lt;br /&gt;
Exiting; no certificate found and waitforcert is disabled&lt;br /&gt;
O puppet cliente vai fazer uma solicitação de assinatura de certificado (CSR) para o Puppet Server (CA). Na verdade já foi feito a solicitação no start do puppet agent, porém é recomendável verificar novamente com o comando “puppet agente –t”.&lt;br /&gt;
Se logue no Puppet Server e assine o certificado solicitado pelo Puppet client.&lt;br /&gt;
Puppet Server puppetserver-01.devopslab.com.br&lt;br /&gt;
#puppet cert list&lt;br /&gt;
root@puppetserver-01 ~]# puppet cert list&lt;br /&gt;
&amp;quot;puppetclient-01.devopslab.com.br&amp;quot; (SHA256) 73:66:B0:FE:4F:96:E6:4B:D8:7B:8E:B3:F5:72:41:&lt;br /&gt;
68:83:50:F3:4C:09:5A:1G:68:F0:47:10:28:6D:11:42:84&lt;br /&gt;
Assinatura do certificado.&lt;br /&gt;
[root@puppetserver-01 ~]# puppet cert sign puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Signed certificate request for puppetclient-01.devopslab.com.br&lt;br /&gt;
Notice: Removing file Puppet::SSL::CertificateRequest puppetclient-01.devopslab.com.br at &lt;br /&gt;
'/etc/puppetlabs/puppet/ssl/ca/requests/puppetclient-01.devopslab.com.br.pem'&lt;br /&gt;
Volte para o cliente “puppetclient-01.devopslab.com.br” e rode novamente o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 ~]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455912908'&lt;br /&gt;
Notice: Applied catalog in 0.03 seconds&lt;br /&gt;
Pronto! Puppet Server e Puppet client (Cliente) funcionando.&lt;br /&gt;
Agora falta apenas criar módulos e ver o puppet aplicando as configurações desejadas.&lt;br /&gt;
6. Criação de módulos de configuração&lt;br /&gt;
6.1 – Módulo 1 – Edição do arquivo /etc/hosts&lt;br /&gt;
Vamos criar um módulo para editar arquivo de hosts de forma automática via puppet.&lt;br /&gt;
Vamos usar o comando “puppet module generate”, é a forma mais “difícil” porém é a recomendada pela Puppetlabs e também mais organizada. Criação de módulos é um assunto extenso, existem várias maneiras de fazer a mesma coisa, das simples as mais complexas, aqui vamos utilizar apenas a forma mais recomendada.&lt;br /&gt;
No PUPPET SERVER&lt;br /&gt;
#puppet module generate&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
#puppet module generate devopslab-edithosts --skip-interview&lt;br /&gt;
Acabamos de criar um módulo devopslab-edithosts.&lt;br /&gt;
A opção “–skip-interview” pula uma série de perguntas como nome do criador do módulo, versão do módulo, descrição e etc, para o nosso caso não precisa, mas você pode dar uma olhada depois.&lt;br /&gt;
Vamos criar nosso manifesto, ou seja definir uma classe.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/edithosts/manifests&lt;br /&gt;
#vi hosts.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
class edithosts::hosts {&lt;br /&gt;
 &lt;br /&gt;
###A linha comment e opcional###&lt;br /&gt;
 host { 'crm.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.10',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'portal.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.11',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'wiki.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 host { 'webmail.devopslab.com.br':&lt;br /&gt;
    ip           =&amp;gt; '10.0.10.13',&lt;br /&gt;
    comment      =&amp;gt; 'Adicionado via Puppet'&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Onde “edithosts” é o nome do módulo, e “hosts” o nome do manifesto.&lt;br /&gt;
Verifique se tem algum erro no manifesto.&lt;br /&gt;
#puppet parser validate hosts.pp&lt;br /&gt;
Vamos criar a definição do node (node são os clientes rodando o puppet client, são seus hosts no geral).&lt;br /&gt;
cd /etc/puppetlabs/code/environments/production/manifests&lt;br /&gt;
 &lt;br /&gt;
#vi site.pp&lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
E seu eu tiver mais de 1 node?. Simplesmente faça assim:&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
node &lt;br /&gt;
'puppetclient-01.devopslab.com.br',&lt;br /&gt;
'puppetclient-02.devopslab.com.br',&lt;br /&gt;
'puppetclient-03.devopslab.com.br',&lt;br /&gt;
'puppetclient-04.devopslab.com.br'&lt;br /&gt;
## assim por diante.&lt;br /&gt;
{&lt;br /&gt;
        include edithosts::hosts&lt;br /&gt;
}&lt;br /&gt;
Valide a configuração site.pp no intuito de achar erros.&lt;br /&gt;
puppet parser validate site.pp&lt;br /&gt;
No PUPPET CLIENT (Node/Cliente).&lt;br /&gt;
Logue no Puppet Cliente e rode o “puppet agente –t”.&lt;br /&gt;
# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455919826'&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[crm.devopslab.com.br]/ensure: created&lt;br /&gt;
Info: Computing checksum on file /etc/hosts&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[portal.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[wiki.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Edithosts::Hosts/Host[webmail.devopslab.com.br]/ensure: created&lt;br /&gt;
Notice: Applied catalog in 0.05 seconds&lt;br /&gt;
Verificando as alterações no /etc/hosts.&lt;br /&gt;
# cat /etc/hosts&lt;br /&gt;
127.0.0.1    localhost    localhost.localdomain localhost4 localhost4.localdomain4&lt;br /&gt;
::1    localhost    localhost.localdomain localhost6 localhost6.localdomain6&lt;br /&gt;
 &lt;br /&gt;
10.0.0.161    puppetclient-01.devopslab.com.br    puppetclient-01&lt;br /&gt;
10.0.0.160    puppetserver-01.devopslab.com.br    puppetserver-01&lt;br /&gt;
10.0.10.10    crm.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.11    portal.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    wiki.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
10.0.10.13    webmail.devopslab.com.br    # Adicionado via Puppet&lt;br /&gt;
Perceba que o arquivo de hosts foi editado automaticamente.&lt;br /&gt;
6.2 – Módulo 2 – Instalação pacotes, remoção, desativação e update de pacotes&lt;br /&gt;
Vou criar um módulo checklist, que vai instalar alguns pacotes, remover os desnecessários, e manter outros atualizados, bem checklist mesmo, toda empresa tem.&lt;br /&gt;
Checklist&lt;br /&gt;
Telnet – Instalar&lt;br /&gt;
Openssh – Manter atualizado na última versão.&lt;br /&gt;
Gnutils – Manter atualizado na última versão.&lt;br /&gt;
Vim – Remover&lt;br /&gt;
No PUPPET SERVER.&lt;br /&gt;
Criação do módulo de checklist “devopslab-checklist”.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules&lt;br /&gt;
puppet module generate devopslab-checklist --skip-interview&lt;br /&gt;
Criação do manifesto.&lt;br /&gt;
#cd /etc/puppetlabs/code/environments/production/modules/checklist/manifests&lt;br /&gt;
#vi pacotes.pp&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
class checklist::pacotes {&lt;br /&gt;
 &lt;br /&gt;
package { [ 'telnet' ]:&lt;br /&gt;
    ensure     =&amp;gt; present,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'openssh' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'gnutls' ]:&lt;br /&gt;
    ensure     =&amp;gt; latest,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
package { [ 'vim' ]:&lt;br /&gt;
    ensure     =&amp;gt; absent,&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
Vamos criar a definição do node. Nós já criamos anteriormente, vamos apenas adicionar um include para o novo manifesto.&lt;br /&gt;
#vi /etc/puppetlabs/code/environments/production/manifests/site.pp&lt;br /&gt;
 &lt;br /&gt;
node 'puppetclient-01.devopslab.com.br' {&lt;br /&gt;
    include    edithosts::hosts&lt;br /&gt;
    include checklist::pacotes&lt;br /&gt;
}&lt;br /&gt;
No PUPPET CLIENT. Logue no cliente e rode o “puppet agente –t”.&lt;br /&gt;
[root@puppetclient-01 /]# puppet agent -t&lt;br /&gt;
Info: Using configured environment 'production'&lt;br /&gt;
Info: Retrieving pluginfacts&lt;br /&gt;
Info: Retrieving plugin&lt;br /&gt;
Info: Loading facts&lt;br /&gt;
Info: Caching catalog for puppetclient-01.devopslab.com.br&lt;br /&gt;
Info: Applying configuration version '1455975217'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[telnet]/ensure: created&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[gnutls]/ensure: ensure changed '3.3.8-12.el7_1.1' to '0:3.3.8-14.el7_2'&lt;br /&gt;
Notice: /Stage[main]/Checklist::Pacotes/Package[vim]/ensure: removed&lt;br /&gt;
Notice: Applied catalog in 8.23 seconds&lt;br /&gt;
Perceba que não aparece nada sobre o openssh, pois ele já está atualizado, então o Puppet sabiamente ignora.&lt;br /&gt;
Finalizamos a instalação do Puppet server e cliente assim como a criação e aplicação de módulos de configuração.&lt;br /&gt;
Em outro tópico vou demonstrar como fazer a Orquestração com o Puppet e instalar o Plugin Facter para colher informações dos hosts.&lt;br /&gt;
Lembrando que a criação de módulos no Puppet é uma ciência, as possibilidades e otimizações são infinitas, dá para brincar bastante, o intuito deste tópico foi apenas fazer uma introdução, porém passe sempre aqui que postarei muitas coisas legais.&lt;br /&gt;
Obrigado&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Devops&amp;diff=3169</id>
		<title>Devops</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Devops&amp;diff=3169"/>
				<updated>2016-11-01T17:30:11Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
== Sobre o DevOps ==&lt;br /&gt;
[[Arquivo:DevOps2.png|right|100px|caption]]&lt;br /&gt;
'''''DevOps''''', é uma cultura de desenvolvimento de software que explora a comunicação, colaboração e integração entre desenvolvedores de software e profissionais de TI.&amp;lt;br /&amp;gt;Com o objetivo de realizar a implantação padronizada de nossos sistemas, os profissionais buscam apoiar o desenvolvimento para minimizar a ocorrência de falhas e indisponibilidades, visando a qualidade nos serviços implantados.&lt;br /&gt;
&lt;br /&gt;
== Documentos ==&lt;br /&gt;
&lt;br /&gt;
* [[Atualização de pacote WEB pelo IIS]]&lt;br /&gt;
* [[Backup de banco de dados]]&lt;br /&gt;
* [[Restore de banco de dados]]&lt;br /&gt;
* [[Publicação de relatórios utilizando o Reporting Services]]&lt;br /&gt;
* [[Modificando o arquivo HOSTS]]&lt;br /&gt;
* [[Erro ao efetuar upload de arquivo Access em site (INCIDENTE)]]&lt;br /&gt;
* [[Criando VM´s com Vagrant]]&lt;br /&gt;
* [[Erro ao abrir a página - Server Error in '/' Application (INCIDENTE)]]&lt;br /&gt;
* [[Manipulando VM´s com scripts PowerShell]]&lt;br /&gt;
* [[Scripts SQL]]&lt;br /&gt;
* [[Puppet]]&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Trilha_NoSQL&amp;diff=1551</id>
		<title>Trilha NoSQL</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Trilha_NoSQL&amp;diff=1551"/>
				<updated>2016-07-19T12:05:35Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: Criou página com 'Infelizmente minha participação no TDC – SP não foi de muita satisfação para meu aprendizado com as ferramentas apresentadas, mas como já trabalhamos com um banco NoSQ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Infelizmente minha participação no TDC – SP não foi de muita satisfação para meu aprendizado com as ferramentas apresentadas, mas como já trabalhamos com um banco NoSQL, vou explicar a instalação e configuração do MongoDB e inclusive a configuração para réplica.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Instalação do MongoDB em um servidor Centos 7.&lt;br /&gt;
&lt;br /&gt;
	Para realizar a instalação do mongo primeiro crie um arquivo no diretório /etc/yum.repos.d/ com o nome de mongodb-org-3.0.repo com o seguinte comando:&lt;br /&gt;
&lt;br /&gt;
sudo vi /etc/yum.repos.d/mongodb-org-3.0.repo&lt;br /&gt;
&lt;br /&gt;
digite a senha de root.&lt;br /&gt;
&lt;br /&gt;
Use o seguinte arquivo de repositório para especificar a última versão estável do MongoDB:&lt;br /&gt;
&lt;br /&gt;
[mongodb-org-3.0]&lt;br /&gt;
name=MongoDB Repository&lt;br /&gt;
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.0/x86_64/&lt;br /&gt;
gpgcheck=0&lt;br /&gt;
enabled=1&lt;br /&gt;
Para utilizar a opção copiar e colar no terminal do vi pressione “i” para entrar no modo de inserção e então pressione as teclas Ctrl+Shift+v para colar o texto acima, em seguida aperte Esc para sair do modo de inserção e as Shift+”:” e “wq” para sair e salvar o arquivo.&lt;br /&gt;
&lt;br /&gt;
Então vamos agora atualizar o repositório e instalar o MongoDB com o yum, execute:&lt;br /&gt;
&lt;br /&gt;
sudo yum update &amp;amp; sudo yum install -y mongodb-org&lt;br /&gt;
&lt;br /&gt;
Permita o acesso a porta 27017 (porta padrão do MongoDB) para o SELinux, para isso execute:&lt;br /&gt;
&lt;br /&gt;
semanage port -a -t mongod_port_t -p tcp 27017&lt;br /&gt;
&lt;br /&gt;
Caso ache necessário pode ser alterado as permissões do SELinux no arquivo de configuração do mesmo que se localiza no diretório /etc/selinux/config.	&lt;br /&gt;
&lt;br /&gt;
Altere:&lt;br /&gt;
&lt;br /&gt;
SELINUX=enforcing&lt;br /&gt;
&lt;br /&gt;
para:&lt;br /&gt;
&lt;br /&gt;
SELINUX=permissive&lt;br /&gt;
&lt;br /&gt;
ou &lt;br /&gt;
&lt;br /&gt;
SELINUX=disabled.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Reinicio o sistema com o sudo reboot, e agora iremos configurar o servidor.&lt;br /&gt;
&lt;br /&gt;
Edite o arquivo mongod.conf que se encontra no diretório /etc/ como o editor vi.&lt;br /&gt;
&lt;br /&gt;
sudo vi /etc/mongod.conf&lt;br /&gt;
&lt;br /&gt;
Obs.: para navegar nas linhas do vi utilize as letras do teclado:&lt;br /&gt;
&lt;br /&gt;
“j” = para ir para baixo&lt;br /&gt;
“k” = para ir para cima&lt;br /&gt;
“l” = para ir para diretia&lt;br /&gt;
“h” = para ir para esquerda.&lt;br /&gt;
&lt;br /&gt;
pressione “i” para entrar no modo de edição e altere as seguintes linhas:&lt;br /&gt;
&lt;br /&gt;
bind_ip=127.0.0.1&lt;br /&gt;
&lt;br /&gt;
alterar para &lt;br /&gt;
&lt;br /&gt;
bind_ip=0.0.0.0&lt;br /&gt;
&lt;br /&gt;
e acrescente a seguinte linha:&lt;br /&gt;
&lt;br /&gt;
replSet=rs1 &lt;br /&gt;
&lt;br /&gt;
OBS.: Na versão 3.0.7 insira assim:&lt;br /&gt;
&lt;br /&gt;
replication:&lt;br /&gt;
    oplogSizeMB: 10240&lt;br /&gt;
    replSetName: &amp;quot;rs1&amp;quot;&lt;br /&gt;
Pronto agora e só sair e salvar com as opções:&lt;br /&gt;
&lt;br /&gt;
Esc, Shift+”:” e “wq”&lt;br /&gt;
&lt;br /&gt;
Feito isso iremos colocar o mongo para iniciar junto como o sistema, execute:&lt;br /&gt;
&lt;br /&gt;
sudo chkconfig mongod on&lt;br /&gt;
&lt;br /&gt;
e inicie o Mongo:&lt;br /&gt;
&lt;br /&gt;
service mongod start.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obs.: Agora iremos configurar o servidor como primario para replicar em outros servidores, para isso iremos repetir todos os passos até aqui em outros servidores e só iremos diferenciar com os passos seguintes no servidor primário definido por você, então executaremos:&lt;br /&gt;
&lt;br /&gt;
mongod --replSet “rs1”&lt;br /&gt;
&lt;br /&gt;
onde “rs1” foi definido la no /etc/mongod.conf, e definiremos esse mesmo em todos os servidores.&lt;br /&gt;
&lt;br /&gt;
Iniciado o conjunto de réplicas no servidor primário execute:&lt;br /&gt;
&lt;br /&gt;
sudo mongo&lt;br /&gt;
&lt;br /&gt;
e &lt;br /&gt;
&lt;br /&gt;
E já dentro do editor do MongoDB execute:&lt;br /&gt;
&lt;br /&gt;
rs.initiate();&lt;br /&gt;
&lt;br /&gt;
Verifique a configuração inicial do conjunto de réplicas.&lt;br /&gt;
Use rs.conf () para exibir o objeto de configuração do conjunto de réplicas:&lt;br /&gt;
rs.conf();&lt;br /&gt;
&lt;br /&gt;
O objeto de configuração do conjunto de réplicas se assemelha ao seguinte:&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;_id&amp;quot; : &amp;quot;rs1&amp;quot;,&lt;br /&gt;
   &amp;quot;version&amp;quot; : 1,&lt;br /&gt;
   &amp;quot;members&amp;quot; : [&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;_id&amp;quot; : 1,&lt;br /&gt;
         &amp;quot;host&amp;quot; : &amp;quot;mongodb0.example.net:27017&amp;quot;&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
Vamos agora adicionar os membros do conjunto de réplicas com o comando:&lt;br /&gt;
&lt;br /&gt;
rs.add(“192.168.0.1”);&lt;br /&gt;
rs.add(“192.168.0.2”);&lt;br /&gt;
&lt;br /&gt;
E para o arbitrario execute:&lt;br /&gt;
rs.addArb(&amp;quot;192.168.11.219&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
Verifique o status do conjunto de réplicas.&lt;br /&gt;
Use o comando:&lt;br /&gt;
rs.status();&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;info&amp;quot; : &amp;quot;run rs.initiate(...) if not yet done for the set&amp;quot;,&lt;br /&gt;
	&amp;quot;ok&amp;quot; : 0,&lt;br /&gt;
	&amp;quot;errmsg&amp;quot; : &amp;quot;no replset config has been received&amp;quot;,&lt;br /&gt;
	&amp;quot;code&amp;quot; : 94&lt;br /&gt;
}&lt;br /&gt;
Pronto, já está tudo configurado.&lt;br /&gt;
Execute:&lt;br /&gt;
exit&lt;br /&gt;
para sair do mongo. &lt;br /&gt;
&lt;br /&gt;
Obs.: não esquecendo de realizar estes últimos passos somente no servidor primário.&lt;br /&gt;
&lt;br /&gt;
Para finalizar vá em cada servidor que receberá a replica do primario e execute:&lt;br /&gt;
mongo &lt;br /&gt;
e&lt;br /&gt;
rs.slaveOk();&lt;br /&gt;
&lt;br /&gt;
Pronto.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Devops&amp;diff=922</id>
		<title>Devops</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Devops&amp;diff=922"/>
				<updated>2016-06-29T17:27:14Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Documentos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
== Sobre o DevOps ==&lt;br /&gt;
[[Arquivo:DevOps2.png|right|100px|caption]]&lt;br /&gt;
'''''DevOps''''', é uma metodologia de desenvolvimento de software que explora a comunicação, colaboração e integração entre desenvolvedores de software e profissionais de TI.&amp;lt;br /&amp;gt;Com o objetivo de realizar a implantação padronizada de nossos sistemas, os profissionais buscam apoiar o desenvolvimento para minimizar a ocorrência de falhas e indisponibilidades, visando a qualidade nos serviços implantados.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentos ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;EventCalendar&amp;gt;&lt;br /&gt;
namespace = Calendário&lt;br /&gt;
&amp;lt;/EventCalendar&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;
def quickSort(arr):&lt;br /&gt;
    less = []&lt;br /&gt;
    pivotList = []&lt;br /&gt;
    more = []&lt;br /&gt;
    if len(arr) &amp;lt;= 1:&lt;br /&gt;
        return arr&lt;br /&gt;
    else:&lt;br /&gt;
       pass&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Arquivo:Exemplo.jpg&amp;diff=623</id>
		<title>Arquivo:Exemplo.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Arquivo:Exemplo.jpg&amp;diff=623"/>
				<updated>2016-06-15T11:15:17Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Devops&amp;diff=622</id>
		<title>Devops</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Devops&amp;diff=622"/>
				<updated>2016-06-15T11:12:36Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Documentos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
== Sobre o DevOps ==&lt;br /&gt;
[[Arquivo:DevOps2.png|right|100px|caption]]&lt;br /&gt;
'''''DevOps''''', é uma metodologia de desenvolvimento de software que explora a comunicação, colaboração e integração entre desenvolvedores de software e profissionais de TI.&amp;lt;br /&amp;gt;Com o objetivo de realizar a implantação padronizada de nossos sistemas, os profissionais buscam apoiar o desenvolvimento para minimizar a ocorrência de falhas e indisponibilidades, visando a qualidade nos serviços implantados.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Documentos ==&lt;br /&gt;
[[Arquivo:Exemplo.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;EventCalendar&amp;gt;&lt;br /&gt;
namespace = Event&lt;br /&gt;
&amp;lt;/EventCalendar&amp;gt;&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Arquitetura_Classpad&amp;diff=280</id>
		<title>Arquitetura Classpad</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Arquitetura_Classpad&amp;diff=280"/>
				<updated>2016-05-27T14:18:38Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Informações Gerais=&lt;br /&gt;
&lt;br /&gt;
== Ambientes utilizados ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ambiente&lt;br /&gt;
! URL de Acesso&lt;br /&gt;
! Credenciais Admin&lt;br /&gt;
|-&lt;br /&gt;
| Desenvolvimento&lt;br /&gt;
| http://dev-mscro.mstech.com.br&lt;br /&gt;
| admin / 123456&lt;br /&gt;
|-&lt;br /&gt;
| Testes&lt;br /&gt;
| http://tst-mscro.mstech.com.br&lt;br /&gt;
| admin / ms@cro&lt;br /&gt;
|-&lt;br /&gt;
| Testes&lt;br /&gt;
| http://tst-mscro.mstech.com.br&lt;br /&gt;
| admin / ms@cro&lt;br /&gt;
|-&lt;br /&gt;
| Homologação Externa&lt;br /&gt;
| http://hom-mscro.mstech.com.br&lt;br /&gt;
| Informação exclusiva do Devops/GTI&lt;br /&gt;
|-&lt;br /&gt;
| Produção&lt;br /&gt;
| http://mscro.mstech.com.br&lt;br /&gt;
| Informação exclusiva do Devops/GTI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Repositório de Versionamento ==&lt;br /&gt;
'''Ambiente:''' GITLab - Git&lt;br /&gt;
&lt;br /&gt;
'''Nome:''' MSCRO&lt;br /&gt;
&lt;br /&gt;
'''Caminho:''' https://gitlab.mstech.com.br/mscro/app-mscro.git&lt;br /&gt;
&lt;br /&gt;
'''Estrutura dos branches:''' Código mantido no tronco, porém mantemos 2 branches para os clientes SP e RJ.&lt;br /&gt;
&lt;br /&gt;
=Visão de Componentes=&lt;br /&gt;
&lt;br /&gt;
[[File:Classpad-escola.png]]&lt;br /&gt;
&lt;br /&gt;
=Decisões de Arquitetura=&lt;br /&gt;
&lt;br /&gt;
==== Persistência ====&lt;br /&gt;
Através de banco de dados relacional&lt;br /&gt;
Criação do banco de dados PostgreSQL nos servidores e em Realm nos dispositivos&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de integração ====&lt;br /&gt;
Será realizada por meio de troca de mensagens entre os dispositivos e o servidor Datacenter e/ou servidor na escola&lt;br /&gt;
Tráfego via WSS entre servidores e dispositivos&lt;br /&gt;
Tráfego via HTTPS entre servidores e entre servidores e dispositivos&lt;br /&gt;
&lt;br /&gt;
==== Log ====&lt;br /&gt;
Implementado log de negócio (para rastreabilidade das ações do usuário) e de log técnico para análise de funcionamento e falhas&lt;br /&gt;
Para os logs utilizamos arquivos de texto gerenciado pelo LOG4J2&lt;br /&gt;
Para crash report usaremos Crashlytics (Fabric.io) &lt;br /&gt;
&lt;br /&gt;
==== Padrão de arquitetura utilizado ====&lt;br /&gt;
Utilizamos Servidores HTTPS RESTful na arquitetura JAX-RS para gerenciamento de APIs.&lt;br /&gt;
Utilizamos o padrão de arquitetura DDD (Domain Driven Design) na aplicação web para ambiente de administração do servidor.&lt;br /&gt;
Utilizamos o padrão “thin client” para os dispositivos. &lt;br /&gt;
Utilizamos o padrão PubSub na comunicação durante uma sessão de aprendizagem&lt;br /&gt;
Utilizamos o protocolo MDNS (Bonjour) para descoberta do servidor da escola&lt;br /&gt;
Utilização de Jetty 9 para servidor HTTPS e WSS.&lt;br /&gt;
Utilização de Hibernate 4 para comunicação com banco de dados PostgreSQL e SQLite.&lt;br /&gt;
Utilização de JMDNS para Discovery na rede.&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de Front-end ====&lt;br /&gt;
Utilização do design nativo Android&lt;br /&gt;
Utilização de front end simplificado nos ambientes de Administração&lt;br /&gt;
Aplicação de Material Design no Android e Angular-JS na Web&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de Back-end ====&lt;br /&gt;
Arquitetura padrão para servidores Java e clientes Android&lt;br /&gt;
Utilização de Java 7 e Android 4.4 ou superior&lt;br /&gt;
&lt;br /&gt;
==== Deploy ====&lt;br /&gt;
Distribuição dos clientes android via Google Play&lt;br /&gt;
Instalação dos servidores via instalador&lt;br /&gt;
Pacotes de instalação APK versionados e assinados conforme padronização&lt;br /&gt;
&lt;br /&gt;
=Fundamentações das decisões tomadas=&lt;br /&gt;
Nesta seção, coloque todas as considerações das tomadas de decisão realizadas para o produto. Porque foi usada tal arquitetura? Porque essa separação de componentes? Porque houve refatoração? Descreva o máximo possível nesta seção para que o histórico das decisões seja armazenado para consultas futuras.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Arquitetura_Classpad&amp;diff=279</id>
		<title>Arquitetura Classpad</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Arquitetura_Classpad&amp;diff=279"/>
				<updated>2016-05-27T14:16:22Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Informações Gerais=&lt;br /&gt;
&lt;br /&gt;
== Ambientes utilizados ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ambiente&lt;br /&gt;
! URL de Acesso&lt;br /&gt;
! Credenciais Admin&lt;br /&gt;
|-&lt;br /&gt;
| Desenvolvimento&lt;br /&gt;
| http://dev-mscro.mstech.com.br&lt;br /&gt;
| admin / 123456&lt;br /&gt;
|-&lt;br /&gt;
| Testes&lt;br /&gt;
| http://tst-mscro.mstech.com.br&lt;br /&gt;
| admin / ms@cro&lt;br /&gt;
|-&lt;br /&gt;
| Testes&lt;br /&gt;
| http://tst-mscro.mstech.com.br&lt;br /&gt;
| admin / ms@cro&lt;br /&gt;
|-&lt;br /&gt;
| Homologação Externa&lt;br /&gt;
| http://hom-mscro.mstech.com.br&lt;br /&gt;
| Informação exclusiva do Devops/GTI&lt;br /&gt;
|-&lt;br /&gt;
| Produção&lt;br /&gt;
| http://mscro.mstech.com.br&lt;br /&gt;
| Informação exclusiva do Devops/GTI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Repositório de Versionamento ==&lt;br /&gt;
'''Ambiente:''' GITLab - Git&lt;br /&gt;
&lt;br /&gt;
'''Nome:''' MSCRO&lt;br /&gt;
&lt;br /&gt;
'''Caminho:''' https://gitlab.mstech.com.br/mscro/app-mscro.git&lt;br /&gt;
&lt;br /&gt;
'''Estrutura dos branches:''' Código mantido no tronco, porém mantemos 2 branches para os clientes SP e RJ.&lt;br /&gt;
&lt;br /&gt;
=Visão de Componentes=&lt;br /&gt;
&lt;br /&gt;
[[File:Classpad-escola.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:/home/edson.rodrigues/Pictures/18d3tlxw9wtwzjpg.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Decisões de Arquitetura=&lt;br /&gt;
&lt;br /&gt;
==== Persistência ====&lt;br /&gt;
Através de banco de dados relacional&lt;br /&gt;
Criação do banco de dados PostgreSQL nos servidores e em Realm nos dispositivos&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de integração ====&lt;br /&gt;
Será realizada por meio de troca de mensagens entre os dispositivos e o servidor Datacenter e/ou servidor na escola&lt;br /&gt;
Tráfego via WSS entre servidores e dispositivos&lt;br /&gt;
Tráfego via HTTPS entre servidores e entre servidores e dispositivos&lt;br /&gt;
&lt;br /&gt;
==== Log ====&lt;br /&gt;
Implementado log de negócio (para rastreabilidade das ações do usuário) e de log técnico para análise de funcionamento e falhas&lt;br /&gt;
Para os logs utilizamos arquivos de texto gerenciado pelo LOG4J2&lt;br /&gt;
Para crash report usaremos Crashlytics (Fabric.io) &lt;br /&gt;
&lt;br /&gt;
==== Padrão de arquitetura utilizado ====&lt;br /&gt;
Utilizamos Servidores HTTPS RESTful na arquitetura JAX-RS para gerenciamento de APIs.&lt;br /&gt;
Utilizamos o padrão de arquitetura DDD (Domain Driven Design) na aplicação web para ambiente de administração do servidor.&lt;br /&gt;
Utilizamos o padrão “thin client” para os dispositivos. &lt;br /&gt;
Utilizamos o padrão PubSub na comunicação durante uma sessão de aprendizagem&lt;br /&gt;
Utilizamos o protocolo MDNS (Bonjour) para descoberta do servidor da escola&lt;br /&gt;
Utilização de Jetty 9 para servidor HTTPS e WSS.&lt;br /&gt;
Utilização de Hibernate 4 para comunicação com banco de dados PostgreSQL e SQLite.&lt;br /&gt;
Utilização de JMDNS para Discovery na rede.&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de Front-end ====&lt;br /&gt;
Utilização do design nativo Android&lt;br /&gt;
Utilização de front end simplificado nos ambientes de Administração&lt;br /&gt;
Aplicação de Material Design no Android e Angular-JS na Web&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de Back-end ====&lt;br /&gt;
Arquitetura padrão para servidores Java e clientes Android&lt;br /&gt;
Utilização de Java 7 e Android 4.4 ou superior&lt;br /&gt;
&lt;br /&gt;
==== Deploy ====&lt;br /&gt;
Distribuição dos clientes android via Google Play&lt;br /&gt;
Instalação dos servidores via instalador&lt;br /&gt;
Pacotes de instalação APK versionados e assinados conforme padronização&lt;br /&gt;
&lt;br /&gt;
=Fundamentações das decisões tomadas=&lt;br /&gt;
Nesta seção, coloque todas as considerações das tomadas de decisão realizadas para o produto. Porque foi usada tal arquitetura? Porque essa separação de componentes? Porque houve refatoração? Descreva o máximo possível nesta seção para que o histórico das decisões seja armazenado para consultas futuras.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Arquitetura_Classpad&amp;diff=276</id>
		<title>Arquitetura Classpad</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Arquitetura_Classpad&amp;diff=276"/>
				<updated>2016-05-27T13:34:17Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Visão de Componentes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Informações Gerais=&lt;br /&gt;
&lt;br /&gt;
== Ambientes utilizados ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ambiente&lt;br /&gt;
! URL de Acesso&lt;br /&gt;
! Credenciais Admin&lt;br /&gt;
|-&lt;br /&gt;
| Desenvolvimento&lt;br /&gt;
| http://dev-mscro.mstech.com.br&lt;br /&gt;
| admin / 123456&lt;br /&gt;
|-&lt;br /&gt;
| Testes&lt;br /&gt;
| http://tst-mscro.mstech.com.br&lt;br /&gt;
| admin / ms@cro&lt;br /&gt;
|-&lt;br /&gt;
| Testes&lt;br /&gt;
| http://tst-mscro.mstech.com.br&lt;br /&gt;
| admin / ms@cro&lt;br /&gt;
|-&lt;br /&gt;
| Homologação Externa&lt;br /&gt;
| http://hom-mscro.mstech.com.br&lt;br /&gt;
| Informação exclusiva do Devops/GTI&lt;br /&gt;
|-&lt;br /&gt;
| Produção&lt;br /&gt;
| http://mscro.mstech.com.br&lt;br /&gt;
| Informação exclusiva do Devops/GTI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Repositório de Versionamento ==&lt;br /&gt;
'''Ambiente:''' GITLab - Git&lt;br /&gt;
&lt;br /&gt;
'''Nome:''' MSCRO&lt;br /&gt;
&lt;br /&gt;
'''Caminho:''' https://gitlab.mstech.com.br/mscro/app-mscro.git&lt;br /&gt;
&lt;br /&gt;
'''Estrutura dos branches:''' Código mantido no tronco, porém mantemos 2 branches para os clientes SP e RJ.&lt;br /&gt;
&lt;br /&gt;
=Visão de Componentes=&lt;br /&gt;
&lt;br /&gt;
[[File:Classpad-servidor.png]]&lt;br /&gt;
&lt;br /&gt;
=Decisões de Arquitetura=&lt;br /&gt;
&lt;br /&gt;
==== Persistência ====&lt;br /&gt;
Através de banco de dados relacional&lt;br /&gt;
Criação do banco de dados PostgreSQL nos servidores e em Realm nos dispositivos&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de integração ====&lt;br /&gt;
Será realizada por meio de troca de mensagens entre os dispositivos e o servidor Datacenter e/ou servidor na escola&lt;br /&gt;
Tráfego via WSS entre servidores e dispositivos&lt;br /&gt;
Tráfego via HTTPS entre servidores e entre servidores e dispositivos&lt;br /&gt;
&lt;br /&gt;
==== Log ====&lt;br /&gt;
Implementado log de negócio (para rastreabilidade das ações do usuário) e de log técnico para análise de funcionamento e falhas&lt;br /&gt;
Para os logs utilizamos arquivos de texto gerenciado pelo LOG4J2&lt;br /&gt;
Para crash report usaremos Crashlytics (Fabric.io) &lt;br /&gt;
&lt;br /&gt;
==== Padrão de arquitetura utilizado ====&lt;br /&gt;
Utilizamos Servidores HTTPS RESTful na arquitetura JAX-RS para gerenciamento de APIs.&lt;br /&gt;
Utilizamos o padrão de arquitetura DDD (Domain Driven Design) na aplicação web para ambiente de administração do servidor.&lt;br /&gt;
Utilizamos o padrão “thin client” para os dispositivos. &lt;br /&gt;
Utilizamos o padrão PubSub na comunicação durante uma sessão de aprendizagem&lt;br /&gt;
Utilizamos o protocolo MDNS (Bonjour) para descoberta do servidor da escola&lt;br /&gt;
Utilização de Jetty 9 para servidor HTTPS e WSS.&lt;br /&gt;
Utilização de Hibernate 4 para comunicação com banco de dados PostgreSQL e SQLite.&lt;br /&gt;
Utilização de JMDNS para Discovery na rede.&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de Front-end ====&lt;br /&gt;
Utilização do design nativo Android&lt;br /&gt;
Utilização de front end simplificado nos ambientes de Administração&lt;br /&gt;
Aplicação de Material Design no Android e Angular-JS na Web&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de Back-end ====&lt;br /&gt;
Arquitetura padrão para servidores Java e clientes Android&lt;br /&gt;
Utilização de Java 7 e Android 4.4 ou superior&lt;br /&gt;
&lt;br /&gt;
==== Deploy ====&lt;br /&gt;
Distribuição dos clientes android via Google Play&lt;br /&gt;
Instalação dos servidores via instalador&lt;br /&gt;
Pacotes de instalação APK versionados e assinados conforme padronização&lt;br /&gt;
&lt;br /&gt;
=Fundamentações das decisões tomadas=&lt;br /&gt;
Nesta seção, coloque todas as considerações das tomadas de decisão realizadas para o produto. Porque foi usada tal arquitetura? Porque essa separação de componentes? Porque houve refatoração? Descreva o máximo possível nesta seção para que o histórico das decisões seja armazenado para consultas futuras.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	<entry>
		<id>http://wiki.mstech.com.br/index.php?title=Arquitetura_Classpad&amp;diff=275</id>
		<title>Arquitetura Classpad</title>
		<link rel="alternate" type="text/html" href="http://wiki.mstech.com.br/index.php?title=Arquitetura_Classpad&amp;diff=275"/>
				<updated>2016-05-27T13:22:59Z</updated>
		
		<summary type="html">&lt;p&gt;Edson.rodrigues: /* Visão de Componentes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Informações Gerais=&lt;br /&gt;
&lt;br /&gt;
== Ambientes utilizados ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ambiente&lt;br /&gt;
! URL de Acesso&lt;br /&gt;
! Credenciais Admin&lt;br /&gt;
|-&lt;br /&gt;
| Desenvolvimento&lt;br /&gt;
| http://dev-mscro.mstech.com.br&lt;br /&gt;
| admin / 123456&lt;br /&gt;
|-&lt;br /&gt;
| Testes&lt;br /&gt;
| http://tst-mscro.mstech.com.br&lt;br /&gt;
| admin / ms@cro&lt;br /&gt;
|-&lt;br /&gt;
| Testes&lt;br /&gt;
| http://tst-mscro.mstech.com.br&lt;br /&gt;
| admin / ms@cro&lt;br /&gt;
|-&lt;br /&gt;
| Homologação Externa&lt;br /&gt;
| http://hom-mscro.mstech.com.br&lt;br /&gt;
| Informação exclusiva do Devops/GTI&lt;br /&gt;
|-&lt;br /&gt;
| Produção&lt;br /&gt;
| http://mscro.mstech.com.br&lt;br /&gt;
| Informação exclusiva do Devops/GTI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Repositório de Versionamento ==&lt;br /&gt;
'''Ambiente:''' GITLab - Git&lt;br /&gt;
&lt;br /&gt;
'''Nome:''' MSCRO&lt;br /&gt;
&lt;br /&gt;
'''Caminho:''' https://gitlab.mstech.com.br/mscro/app-mscro.git&lt;br /&gt;
&lt;br /&gt;
'''Estrutura dos branches:''' Código mantido no tronco, porém mantemos 2 branches para os clientes SP e RJ.&lt;br /&gt;
&lt;br /&gt;
=Visão de Componentes=&lt;br /&gt;
&lt;br /&gt;
[[File:Classpad-servidor.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[/home/edson.rodrigues/Pictures/18d3tlxw9wtwzjpg.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Decisões de Arquitetura=&lt;br /&gt;
&lt;br /&gt;
==== Persistência ====&lt;br /&gt;
Através de banco de dados relacional&lt;br /&gt;
Criação do banco de dados PostgreSQL nos servidores e em Realm nos dispositivos&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de integração ====&lt;br /&gt;
Será realizada por meio de troca de mensagens entre os dispositivos e o servidor Datacenter e/ou servidor na escola&lt;br /&gt;
Tráfego via WSS entre servidores e dispositivos&lt;br /&gt;
Tráfego via HTTPS entre servidores e entre servidores e dispositivos&lt;br /&gt;
&lt;br /&gt;
==== Log ====&lt;br /&gt;
Implementado log de negócio (para rastreabilidade das ações do usuário) e de log técnico para análise de funcionamento e falhas&lt;br /&gt;
Para os logs utilizamos arquivos de texto gerenciado pelo LOG4J2&lt;br /&gt;
Para crash report usaremos Crashlytics (Fabric.io) &lt;br /&gt;
&lt;br /&gt;
==== Padrão de arquitetura utilizado ====&lt;br /&gt;
Utilizamos Servidores HTTPS RESTful na arquitetura JAX-RS para gerenciamento de APIs.&lt;br /&gt;
Utilizamos o padrão de arquitetura DDD (Domain Driven Design) na aplicação web para ambiente de administração do servidor.&lt;br /&gt;
Utilizamos o padrão “thin client” para os dispositivos. &lt;br /&gt;
Utilizamos o padrão PubSub na comunicação durante uma sessão de aprendizagem&lt;br /&gt;
Utilizamos o protocolo MDNS (Bonjour) para descoberta do servidor da escola&lt;br /&gt;
Utilização de Jetty 9 para servidor HTTPS e WSS.&lt;br /&gt;
Utilização de Hibernate 4 para comunicação com banco de dados PostgreSQL e SQLite.&lt;br /&gt;
Utilização de JMDNS para Discovery na rede.&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de Front-end ====&lt;br /&gt;
Utilização do design nativo Android&lt;br /&gt;
Utilização de front end simplificado nos ambientes de Administração&lt;br /&gt;
Aplicação de Material Design no Android e Angular-JS na Web&lt;br /&gt;
&lt;br /&gt;
==== Tecnologia de Back-end ====&lt;br /&gt;
Arquitetura padrão para servidores Java e clientes Android&lt;br /&gt;
Utilização de Java 7 e Android 4.4 ou superior&lt;br /&gt;
&lt;br /&gt;
==== Deploy ====&lt;br /&gt;
Distribuição dos clientes android via Google Play&lt;br /&gt;
Instalação dos servidores via instalador&lt;br /&gt;
Pacotes de instalação APK versionados e assinados conforme padronização&lt;br /&gt;
&lt;br /&gt;
=Fundamentações das decisões tomadas=&lt;br /&gt;
Nesta seção, coloque todas as considerações das tomadas de decisão realizadas para o produto. Porque foi usada tal arquitetura? Porque essa separação de componentes? Porque houve refatoração? Descreva o máximo possível nesta seção para que o histórico das decisões seja armazenado para consultas futuras.&lt;/div&gt;</summary>
		<author><name>Edson.rodrigues</name></author>	</entry>

	</feed>