Introdução

Depois de instalar o Ansible e configurar o inventário, o próximo passo natural é escrever playbooks — arquivos YAML que descrevem, de forma declarativa, o estado desejado dos seus servidores. Neste tutorial, reunimos exemplos práticos e comentados de playbooks para Ubuntu Linux, cobrindo cenários comuns em ambientes de TI industrial: instalação de pacotes, criação de usuários, configuração de firewall, gerenciamento de serviços e deploy de aplicações. Todos os exemplos são funcionais e podem ser adaptados diretamente ao seu ambiente.

Pré-requisitos

Exemplo 1: Instalação e atualização de pacotes

Um dos usos mais comuns do Ansible é garantir que um conjunto de pacotes esteja sempre instalado e atualizado:

---
- name: Instalar pacotes essenciais no Ubuntu
  hosts: all
  become: true
  tasks:
    - name: Atualizar cache do apt
      apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Instalar pacotes basicos
      apt:
        name:
          - htop
          - curl
          - vim
          - net-tools
          - unzip
        state: present

Exemplo 2: Criação de usuários e chaves SSH

Gerenciar usuários manualmente em dezenas de servidores é propenso a erros. Este playbook cria um usuário de automação e configura sua chave pública:

---
- name: Criar usuario de automacao
  hosts: all
  become: true
  tasks:
    - name: Criar grupo de automacao
      group:
        name: automacao
        state: present

    - name: Criar usuario ansible-svc
      user:
        name: ansible-svc
        group: automacao
        shell: /bin/bash
        create_home: yes

    - name: Adicionar chave publica SSH
      authorized_key:
        user: ansible-svc
        state: present
        key: "{{ lookup('file', 'chaves/ansible-svc.pub') }}"

Exemplo 3: Configuração do firewall UFW

Padronizar regras de firewall é essencial para a segurança em ambientes industriais. O exemplo abaixo libera apenas as portas necessárias:

---
- name: Configurar firewall UFW
  hosts: all
  become: true
  tasks:
    - name: Instalar UFW
      apt:
        name: ufw
        state: present

    - name: Permitir SSH
      ufw:
        rule: allow
        port: "22"
        proto: tcp

    - name: Permitir HTTP e HTTPS
      ufw:
        rule: allow
        port: "{{ item }}"
        proto: tcp
      loop:
        - "80"
        - "443"

    - name: Habilitar UFW
      ufw:
        state: enabled
        policy: deny

Exemplo 4: Gerenciamento de serviços systemd

Garantir que serviços críticos estejam sempre ativos é fundamental em servidores de supervisão (SCADA/MES):

---
- name: Garantir servicos ativos
  hosts: servidores_industriais
  become: true
  tasks:
    - name: Garantir que o servico Docker esteja rodando
      systemd:
        name: docker
        state: started
        enabled: true

    - name: Reiniciar servico de monitoramento
      systemd:
        name: node_exporter
        state: restarted
      when: ansible_facts['os_family'] == "Debian"

Exemplo 5: Deploy de uma aplicação via Docker

Playbook completo que instala o Docker e sobe um container de aplicação, útil para gateways de coleta de dados industriais:

---
- name: Deploy de aplicacao via Docker
  hosts: gateways
  become: true
  vars:
    imagem_app: "registry.astechsolutions.com.br/coletor-dados:latest"
  tasks:
    - name: Instalar dependencias do Docker
      apt:
        name:
          - docker.io
          - python3-pip
        state: present

    - name: Instalar biblioteca docker para Python
      pip:
        name: docker

    - name: Subir container do coletor de dados
      docker_container:
        name: coletor-dados
        image: "{{ imagem_app }}"
        state: started
        restart_policy: unless-stopped
        ports:
          - "8080:8080"
        env:
          MODBUS_HOST: "192.168.10.50"
          MODBUS_PORT: "502"

Executando os playbooks

Todos os exemplos acima são executados da mesma forma, apontando para o inventário e o arquivo do playbook:

ansible-playbook -i hosts.ini nome-do-playbook.yml --check
ansible-playbook -i hosts.ini nome-do-playbook.yml

O uso da flag --check simula a execução sem aplicar mudanças reais, permitindo validar o playbook antes de rodar em produção.

Boas práticas

ansibleplaybookubuntuyamlautomacao
← Voltar para o blog