Automatizando tarefas com o Puppet

Logo-Puppet
Gerenciar vários servidores é sempre complicado, principalmente se você quer fazer da forma correta :-).
Existem ferramentas comerciais para Windows que, com o devido licenciamento, fazem essas tarefas de forma mais simplificada como:
– Instalação de programas;
– Atualização de sistemas e programas;
– Criação de usuários e grupos;
– Criação de arquivos;
– Configuração de aplicações;
– Gestão de recursos do sistema;
– etc…
O problema é que como o System Center, a maioria dessas ferramentas não é barata e muito menos pode ser usada em Linux/Unix.
Para uma gestão integrada e seguindo padrões como Itil, é preciso mais que ir de servidor em servidor, desktop em desktop para fazer as devidas operações necessárias.
Para resolver esse tipo de problemas utilizamos linguagens de automação como o Puppet. Ele trabalha no modelo Cliente/Servidor e permite que façamos uma gama imensa de funções nos abstraindo de detalhes específicos do sistema operacional.
Vamos ver em uma série de artigos sobre ele e como utilizar suas principais funções e módulos para que possamos tornar o gerenciamento, configuração e deploy de máquinas algo simples e automático.

Existem diversas formas de automatizar tarefas com scripts, são um pouco trabalhosas mas são extremamente configuráveis, o problema é lidar com a interatividade dos sistemas e com as situações adversas ao realizar as operações. O tratamento de erros geralmente fica muito maior que as atividades a realizar.
No Puppet, como em outros programas do mesmo tipo, temos a RAL (Resource Abstraction Layer) que nos fornece a capacidade de dizer ao sistema Linux, por exemplo: instale um determinado pacote, depois de instalar crie um usuário com determinado nome e grupo, depois copie um arquivo de configuração padrão por http, altere algumas variáveis no arquivo e reinicie o serviço.
Isso sem se preocupar se usamos apt-get, yast, zipper, sem se preocupar se vai criar com adduser ou useradd, se vai baixar com wget ou lynx se vai iniciar com service ou outro comando, só quero que ele faça o que eu mando.
Isso torna a criação de scripts de ação para o puppet que pode ser utilizados, com pouca ou nenhuma adaptação em um parque de servidores com diversas distribuições Linux, Unix (e temos Puppet até para Windows :-P).
Vamos ver neste artigo como começara usar o Puppet para tarefas diárias e até com algumas condições para realização das mesmas.
A instalação do cliente e servidor serão feitas no Ubuntu Server 12.04, mas o funcionamento é o mesmo em outras distribuições como CentOS e Suse, bastando apenas a instalação dos pacotes correspondentes.
Vamos lá,
No host que será o servidor, chamaremos de master, faça o seguinte:
# apt-get install puppetmaster
No caso do servidor também instalo o vim-puppet para syntax em arquivos do puppet.
Se você não possuir um DNS corretamente funcionando, edite o /etc/hosts do servidor e adicione a seguinte linha:
192.168.1.253 master.cooperati.local master
192.168.1.252 server1.cooperati.local server1

Onde 192.168.1.253 é o IP do servidor, cooperati.local é o domínio utilizado.
No host que será o cliente, chamaremos de server1, faça o seguinte:
# apt-get install puppet
Edite o /etc/hosts do cliente e adicione a seguinte linha:
192.168.1.253 master.cooperati.local master
Ainda no cliente entre no arquivo /etc/default/puppet para habilitar o serviço:
# vi /etc/default/puppet
Altere de:
START=no
Para:
START=yes
Edite no cliente o arquivo do puppet:
# vi /etc/puppet/puppet.conf
No início do arquivo crie a seção puppetd com a seguinte configuração:
[puppetd] server=master.cooperati.local
Agora vamos criar a relação de confiança entre cliente e servidor.
No cliente faça:

# puppet --server master.cooperati.local waitforcert 60 test


Assim vamos conectar ao servidor e aguardar o certificado.
No servidor faça:

# puppetca --list


Deve aparecer o nome do cliente que requisitou o certificado.
Vamos assinar e validar o certificado:

# puppetca --sign server1.cooperati.local


Pronto agora estão se comunicando corretamente.
No cliente inicie o agente do puppet com:
# /etc/init.d/puppet restart
Por padrão o agente do puppet verifica a cada meia hora sobre instruções no servidor, mas para diminuir esse tempo altere seu arquivo de configuração com a seguinte linha na seção [main]:
# vi /etc/puppet/puppetd.conf
.
.
.
[main] .
.
.
runinterval=300

Reinicie o serviço e assim ele executa a checagem a cada 5 minutos.
Vamos criar nossa primeira tarefa, como o puppet tem nomes padrão de arquivos de manifestos, que são os arquivos com comandos de execução do puppet, vamos usar o site.pp com o seguinte conteúdo:
# vi /etc/puppet/manifests/site.pp

package { 'ntp': ensure => 'present'
}
exec { 'apt-get update':
	path => '/usr/bin/:/bin/:/sbin:/usr/sbin/'
}
exec { 'apt-get upgrade -y':
	path => '/usr/bin/:/bin/:/sbin:/usr/sbin/'
}
node 'server1' {
}


Assim ele vai executar essas ações em todos os hosts mencionados em node, veja que para instalar o pacote ntp eu não precisei especificar qual comando de instalação, apenas para atualizar o sistema especifiquei o comando.
Se você configurou o intervalo da checagem do agente para 5 minutos (300 segundos) aguarde um pouco para verificar se vai encontrar o arquivo /etc/ntp.conf na máquina e se o sistema estará atualizado.
Nos próximos artigos vou mostrar como fazer a programação das tarefas de forma mais organizada e como especificar para qual distribuição Linux determinada ação deve ser aplicada. Posteriormente veremos deploy de arquivos pré-configurados e edição de configuração de servidores.
Não esqueça de comentar e curtir nossa página no Facebook.

Share

    Deixe uma resposta

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

    © 2019 All Rights Reserved. Cooperati.