Table of Contents

Ansible - Ola mundo

Para conceituar o Ansible irei utilizar as próprias palavras do site oficial

Ansible delivers simple IT automation that ends repetitive tasks and frees up DevOps teams for more strategic work.

Traduzindo

Ansible entrega automação de TI para tarefas repetitivas e libera o time de DevOps para trabalhem de forma estrategicas.

O Ansible é um automatizador de tarefas repetitivas. Imaginemos que você é responsavel pela administração de 300 servidores e precisa criar um novo usuário nesses 300 servidores. O Ansible torna essa tarefa fácil.

Vou montar uma topologia bem simples faremos com um servidor Ansible é um servidor Web apenas para exemplificar a diferença seria aumentar a quantidade de servidores.

Não vou entrar nos detalhes de instalação que considero uma tarefa simples.

Entendendo o Ansible

Criando a chave SSH para conectar no servidor Web

Uma coisa que apanhei no começo você precisa gerar a chave para o usuário que irá utilizar. A grande maioria utiliza o usuário root, mas e no ubuntu que não temos o usuário root ativado, utilizamos o comando “sudo -s” para se tornar root, Neste caso iremos escolher um usuário e geraremos as chaves do ssh para ele, e depois configuraremos a parte do “sudo -s” no servidor que iremos logar e realizar a tarefa administrativa. Para a geração de senha utilize o comando ssh-keygen e depois o ssh-copy-id.

ricardobarbosa@devops:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ricardobarbosa/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ricardobarbosa/.ssh/id_rsa.
Your public key has been saved in /home/ricardobarbosa/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:PbRi4yD4HceaVKonIDm3STqCrHt+gAY9AzTbaxarFp0 ricardobarbosa@devops
The key's randomart image is:
+---[RSA 2048]----+
|.o               |
|. +              |
| + o    . .      |
|..=.=  + o .     |
|=o=E. = S +      |
|+B*= = O o .     |
|*+o.+ = .        |
|+.. .o           |
|o+..             |
+----[SHA256]-----+
ricardobarbosa@devops:~$
ricardobarbosa@devops:~$ ssh-copy-id -i ~/.ssh/id_rsa.pub ricardobarbosa@192.168.10.11
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ricardobarbosa/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
ricardobarbosa@192.168.10.188's password:
 
Number of key(s) added: 1
 
Now try logging into the machine, with:   "ssh 'ricardobarbosa@192.168.10.11'"
and check to make sure that only the key(s) you wanted were added.
 
ricardobarbosa@devops:~$

Se você tentar fazer um deploy solto você se confrontara com uma mensagem de “access denied”. Para isso precisamos alterar o arquivo /etc/ansible/ansible.cfg

[privilege_escalation]
become=True
become_method=sudo
become_ask_pass=True

Testando comunicação do Ansible com servidor Web

Para testar a comunicação do Ansible com o servidor utilizamos o módulo ping.

ricardobarbosa@devops:~$ ansible -m ping all
SUDO password:
192.168.10.11 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
ricardobarbosa@devops:~$

Criando playbook para instalar o apache e softwares phpn e afins

Vamos criar um playbook para instalar os seguintes pacotes

Depois ativamos os módulos do apache rewrite e vhost_alias e reiniciamos o servidor apache. Abaixo segue o arquivo do playbook.

---
- hosts: all
  user: ricardobarbosa
  become_user: root
 
  tasks:
          - name: Geral | Instalando pacotes necessarios.
            action: apt pkg={{ item }} state=present
            with_items:
                    - php
                    - apache2
                    - mysql-server
                    - mysql-client
                    - php-mysql
          - name: Apache2  habilitando modulos
            action: command a2enmod rewrite vhost_alias
 
          - name: Reiniciando Apache
            action: service name=apache2 state=restarted

Executando o playbook

ricardobarbosa@devops:~$ ansible-playbook apacheLamp.yml
SUDO password:
 
PLAY [all] ********************************************************************************************************************************
 
TASK [Gathering Facts] ********************************************************************************************************************
ok: [192.168.10.11]
 
TASK [Geral - Instalando pacotes necessarios.] ********************************************************************************************
ok: [192.168.10.11] => (item=[u'php', u'apache2', u'mysql-server', u'mysql-client', u'php-mysql'])
 
TASK [Apache2 - habilitando modulos] ******************************************************************************************************
changed: [192.168.10.11]
 
TASK [Servicos - Reiniciando Apache] ******************************************************************************************************
changed: [192.168.10.11]
 
PLAY RECAP ********************************************************************************************************************************
192.168.10.11             : ok=4    changed=2    unreachable=0    failed=0
 
ricardobarbosa@devops:~$