1001Ferramentas
🅰️Geradores

Gerador de tarefa Ansible

Gera uma tarefa YAML Ansible com módulos comuns (apt, copy, template, service, file) e variáveis. Pronto para playbook.


  

Tasks Ansible a fundo: configuração agentless, módulos, idempotência e padrões de playbook

Ansible é uma engine open-source de automação para gerenciamento de configuração e orquestração. Michael DeHaan lançou em 2012; a Red Hat comprou em 2015. O grande diferencial é ser agentless: conecta nos hosts gerenciados via SSH (ou WinRM no Windows) e executa snippets Python (ou PowerShell) ad-hoc — sem daemon para instalar ou manter rodando. A DSL é YAML puro, o modelo de execução é push (o control node dirige os alvos) e todo módulo bem escrito é idempotente (rodar duas vezes produz o mesmo resultado).

O vocabulário: um playbook é uma lista ordenada de plays; cada play mapeia um grupo de hosts (do inventory) numa sequência de tasks; cada task invoca um module. Peças opcionais: handlers (acionados em mudança), roles (pacotes reutilizáveis de tasks/handlers/templates/vars), collections (unidade moderna de empacotamento, ex: community.general, kubernetes.core).

Sintaxe da task

- name: Instalar e iniciar nginx
  hosts: web
  become: true
  tasks:
    - name: Instalar nginx
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true
      when: ansible_os_family == "Debian"

    - name: Subir config
      ansible.builtin.template:
        src: nginx.conf.j2
        dest: /etc/nginx/nginx.conf
        mode: "0644"
      notify: Reiniciar nginx

  handlers:
    - name: Reiniciar nginx
      ansible.builtin.service:
        name: nginx
        state: restarted

O nome totalmente qualificado do módulo (ansible.builtin.apt em vez de só apt) é o estilo moderno — fixa de qual collection vem o módulo e evita surpresas após upgrades.

Módulos do dia a dia

  • apt, yum, dnf, package — instalar pacotes.
  • file, copy, template — gerenciar arquivos (template usa Jinja2 para renderizar variáveis).
  • service, systemd — start/stop/enable serviços.
  • user, group, authorized_key — usuários e chaves SSH.
  • git, unarchive — baixar código e extrair archives.
  • lineinfile, blockinfile — edições cirúrgicas em arquivos existentes (use com parcimônia; prefira template).
  • command vs shellshell passa por /bin/sh (pipes, redirects); command não. Nenhum é idempotente por padrão — limite com creates: / removes: ou changed_when:.

Variáveis, templates e segredos

Variáveis podem ser definidas inline, em vars/, em arquivos por host (host_vars/) ou por grupo (group_vars/), na linha de comando (--extra-vars) ou puxadas de inventory plugins. Templates usam Jinja2 ({{ var | filter }}, condicionais, loops). Para segredos use o Ansible Vault (ansible-vault encrypt) — YAML criptografado que dá para comitar com segurança, descriptografado em runtime com senha ou um provider de vault-id.

Loops, condicionais, tags e check mode

  • loop: — palavra-chave moderna de loop (substitui o antigo with_items).
  • when: — roda a task só se a expressão for verdadeira (when: ansible_os_family == "RedHat").
  • tags: — rotula tasks para que --tags deploy rode só esse subconjunto.
  • --check — dry run; --diff mostra o que mudaria.
  • gather_facts: false — pula a coleta inicial de facts quando não precisa (é lenta).

Boas práticas

  • Sempre coloque name: em cada task — o output vira documentação.
  • Use nomes totalmente qualificados (ansible.builtin.copy) e fixe collections em requirements.yml.
  • Prefira idempotência via módulo a command/shell; se precisar dar shell, configure changed_when.
  • Criptografe segredos com Vault — nunca comite senhas em texto plano.
  • Empacote qualquer coisa reusada como role; compartilhe via Ansible Galaxy ou registry privado.
  • Teste com Molecule + Docker antes de mandar para hosts de prod.
  • Rode ansible-lint no CI.

FAQ

Ansible funciona no Windows? Sim, via WinRM (ou SSH no Windows Server 2019+). Há módulos dedicados (win_package, win_feature, win_service). O control node em si precisa rodar em Linux/macOS — Windows só é suportado como alvo.

Ansible gerencia Kubernetes? Sim, via collection kubernetes.core (módulos k8s, helm, k8s_info). Faz sentido quando Kubernetes é uma peça de um provisionamento maior junto com servidores e equipamentos de rede.

Configuration management ou orquestração? Os dois. Plays podem ser sequenciais (orquestrar deploy multi-tier em DB, app, load balancer) ou paralelos (aplicar mesma config a uma frota). A palavra serial: controla quantos hosts rodam em paralelo num rolling deploy.

Ansible vs Puppet vs Chef vs Salt? Ansible é push + agentless (SSH). Puppet e Chef são pull + agent (daemon nos nós). Salt usa ZeroMQ master-minion (rápido em larga escala, mais setup). Ansible ganha em adoção rápida e frota pequena; Salt ganha em frota gigante que precisa de eventos de baixa latência.

O que é AWX / Tower / AAP? A UI web e API em volta do Ansible: agendamento de jobs, RBAC, vault de credenciais, surveys, audit log. AWX é o upstream open-source; Ansible Automation Platform é a oferta comercial da Red Hat com suporte.

Ferramentas Relacionadas