kb.erickguedes.com
Linux Avançado: Administração e Performance

Automação com Ansible

Aula 7 de 7

Conceitos

Ansible é uma ferramenta de automação agentless (via SSH). Usa YAML para definir estados desejados.

# Instalação (control node)
pip install ansible
# ou
sudo apt install ansible

# Verificar
ansible --version

Inventory

# /etc/ansible/hosts ou inventário:

[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11

[databases]
db1 ansible_host=192.168.1.20
db2 ansible_host=192.168.1.21

[all:vars]
ansible_user=admin
ansible_ssh_private_key_file=~/.ssh/id_ed25519

Ad-Hoc Commands

ansible all -m ping                           # testar conectividade
ansible webservers -m shell -a "uptime"       # comando remoto
ansible all -m apt -a "name=nginx state=latest"  # gerenciar pacotes
ansible all -m copy -a "src=file dest=/tmp/"
ansible all -m service -a "name=nginx state=started enabled=yes"

Playbooks

---
- name: Configurar servidor web
  hosts: webservers
  become: yes
  vars:
    nginx_port: 8080
    app_user: deploy

  tasks:
    - name: Atualizar cache apt
      apt:
        update_cache: yes

    - name: Instalar nginx
      apt:
        name: nginx
        state: latest

    - name: Copiar configuração
      template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify: restart nginx

    - name: Iniciar e habilitar nginx
      service:
        name: nginx
        state: started
        enabled: yes

  handlers:
    - name: restart nginx
      service:
        name: nginx
        state: restarted

Roles

# Estrutura de diretórios
roles/
  nginx/
    tasks/main.yml
    handlers/main.yml
    templates/nginx.conf.j2
    vars/main.yml
    defaults/main.yml
    meta/main.yml

# Playbook usando role
- hosts: webservers
  roles:
    - nginx
  vars:
    nginx_port: 8080

Templates (Jinja2)

{# templates/nginx.conf.j2 #}
server {
    listen {{ nginx_port }};
    server_name {{ inventory_hostname }};

    location / {
        proxy_pass http://localhost:{{ app_port }};
    }
}

Ansible Vault — Segredos

ansible-vault create secrets.yml    # criar arquivo criptografado
ansible-vault edit secrets.yml      # editar
ansible-vault decrypt secrets.yml   # descriptografar

# Usar no playbook
ansible-playbook playbook.yml --ask-vault-pass

Ansible transforma administração manual em código. Idempotente, versionável e reutilizável. Essencial para infraestrutura como código.