Existem alguns artigos na internet que comparam Ansible e Puppet como concorrentes e que Ansible substitui o Puppet e assim por diante, mas na minha opinião as ferramentas se complementam, no meu dia a dia eu adotei a seguinte filosofia:
Deploys -> Ansible Gerênciamento de Configuração -> Puppet
Então esse post tem como objetivo mostrar como o Ansible pode ser utilizado para fazer a instalação do Puppet em uma máquina que acabou de ser criada.
Afinal sabe-se que o puppet para funcionar é necessário que seja feita a instalação de um agent e sincronizado com o servidor master e esse trabalho teóricamente é manual, mas podemos automatizar esse processo utilizando o Ansible.
A única coisa que o Ansible precisa para executar em uma máquina é o acesso via SSH, então vamos ver como isso funciona. No exemplo abaixo vou criar um Playbook, que vai instalar o servidor do Puppet Master.
Um Playbook é um arquivo com todas as instruções para a execução de uma determinada tarefa, uma boa prática é criar Roles ao invés de Playbooks, pois as Roles além de serem mais organizadas tornam os seus scripts do Ansible reutilizáveis, mas isso é assunto pra outro post. Abaixo segue a playbook para instalar o servidor puppet master:
--- - hosts: puppet user: root vars: master_name: puppetmaster master_name_domain: puppetmaster.responsus.com.br tasks: - name: Configuring hostname hostname: name=puppetmaster.responsus.com.br - name: Installing puppet apt: name=puppet state=latest - name: Deleting certificates file: path=/var/lib/puppet/ssl state=absent - name: Copying template file template: src=puppet.conf.tpl dest=/etc/puppet/puppet.conf - name: Generating Cert shell: puppet master --verbose
Uma playbook do ansible é bem simples, é basicamente um arquivo no formato yaml, com palavras chaves específicas do ansible. Agora temos também o arquivo hosts que fica da seguinte maneira:
[puppet] 192.168.0.112
Um terceiro arquivo que temos que criar também é o arquivo de template, pois é necessário configurar o puppet.conf com o hostname da máquina em que ele será instalado. O arquivo de template ficará da seguinte maneira:
[main] logdir=/var/log/puppet vardir=/var/lib/puppet ssldir=/var/lib/puppet/ssl rundir=/var/run/puppet factpath=$vardir/lib/facter prerun_command=/etc/puppet/etckeeper-commit-pre postrun_commnad=/etc/puppet/etckeeper-commit-post certname = {{master_name}} dns_alt_name = {{master_name}}, {{master_name_domain}} [master] ssl_client_header = SSL_CLIENT_S_DN ssl_client_file_header = SSL_CLIENT_VERIFY
Note que em certname e dns_alt_name são as variáveis que estão dentro da seção vars no nosso playbook. Não esqueça de que é necessário fazer a liberação de acesso através de chaves, para copiar a chave da sua máquina local para o servidor em que será instalado o puppet você pode executar a seguinte instrução:
ssh-keygen ssh-copy-id root@192.168.0.112
O primeiro comando vai gerar uma nova chave que será armazenada em ~/.ssh/id_rsa e o segundo comando vai copiar esse chave para o outro servidor. Agora para executar a playbook deve ser executado o seguinte comando:
alisson@alisson-laptop:~/Ansible$ ansible-playbook puppetmaster.yml -i hosts
A saída do comando deverá ser parecida com essa:
PLAY [puppet] ****************************************************************** TASK [setup] ******************************************************************* ok: [192.168.0.112] TASK [Configuring hostname] **************************************************** ok: [192.168.0.112] TASK [Installing puppet] ******************************************************* changed: [192.168.0.112] TASK [Deleting certificates] *************************************************** changed: [192.168.0.112] TASK [Copying template file] *************************************************** ok: [192.168.0.112] TASK [Generating Cert] ********************************************************* changed: [192.168.0.112] PLAY RECAP ********************************************************************* 192.168.0.112 : ok=6 changed=3 unreachable=0 failed=0
Caso você queira validar se o seu servidor foi instalado com sucesso basta logar na máquina e executar o seguinte comando:
root@puppetmaster:~# puppet cert list --all + "puppetmaster.responsus.com.br" (SHA256) 8C:CA:78:2D:55:2F:94:84:EF:08:E5:B5:CC:FD:1F:4A:62:EF:E2:21:45:57:5F:7D:56:CC:58:7C:49:4A:3A:45 (alt names: "DNS:puppet", "DNS:puppet.responsus.com.br", "DNS:puppetmaster.responsus.com.br")
Valeu! \o