Escrevendo seu primeiro Playbook

AnsibleBeginner
Pratique Agora

Introdução

No laboratório anterior, você executou um único comando (ansible ... -m ping). Embora isso seja útil para verificações rápidas, o verdadeiro poder do Ansible está nos Playbooks.

Um playbook é um arquivo de texto que contém instruções de automação. Diferentemente de um script de shell comum, um playbook normalmente se concentra no estado final desejado, e não em cada etapa de baixo nível dos comandos.

Esse modelo baseado no estado desejado é uma das ideias mais importantes do Ansible. Em vez de dizer “execute estes comandos exatamente”, você normalmente descreve a condição que deve ser verdadeira quando a automação terminar.

Os playbooks são escritos em YAML, um formato de dados legível por humanos. Isso facilita a revisão, o compartilhamento e a manutenção da automação.

Neste laboratório, você escreverá um playbook que transforma um servidor em um servidor web ao:

  1. Instalar o Nginx (um servidor web popular).
  2. Garantir que o serviço do Nginx esteja em execução.

Depois, você executará esse playbook para configurar sua máquina local.

Criar o arquivo do Playbook

Começaremos criando o arquivo do playbook. Por convenção, o playbook principal costuma receber o nome site.yml.

Primeiro, verifique se você está no diretório do projeto:

cd ~/project

Agora, crie e abra um novo arquivo chamado site.yml usando o editor de texto nano:

nano site.yml

Na primeira linha do arquivo, digite três hifens. Isso marca o início de um documento YAML.

---

Regras importantes do YAML:

  • A indentação é fundamental! Use espaços, geralmente 2, e não tabulações. Se a indentação estiver incorreta, o Ansible exibirá um erro.
  • Salve o arquivo com frequência. No nano, pressione Ctrl+O e depois Enter para salvar, mas mantenha o arquivo aberto para as próximas etapas.

Definir o Play

Um playbook é composto por um ou mais “plays”. Um play associa um grupo de hosts às tarefas que você deseja executar neles.

Essa associação entre o grupo de hosts e as tarefas permite que um único playbook seja usado tanto em uma máquina quanto em muitas. A lógica permanece em um só lugar, enquanto o inventário determina onde ela será aplicada.

No arquivo site.yml, adicione as linhas a seguir abaixo de ---.

---
- hosts: webservers
  become: yes

Entenda o código:

  • - hosts: webservers: informa ao Ansible: “Execute estas instruções em todos os servidores listados no grupo [webservers] do meu inventário.”
  • become: yes: equivale a digitar sudo antes de um comando. Isso concede privilégios de root ao Ansible, necessários para instalar software.

Verifique se - hosts começa exatamente no início da linha, sem espaços antes do hífen.

Salve o arquivo (Ctrl+O, Enter).

Adicionar uma tarefa de instalação

Agora precisamos informar ao Ansible o que fazer. Para isso, adicionaremos uma lista de tarefas. Cada tarefa usa um módulo.

Usaremos o módulo apt (pois estamos no Ubuntu) para instalar o Nginx.

Atualize o arquivo site.yml para que ele fique assim:

---
- hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present

Entenda o código:

  • tasks: inicia a lista de tarefas.
  • - name: ... é uma descrição para humanos. Ela será exibida na tela quando você executar o playbook.
  • apt: chama o módulo apt.
  • name: nginx especifica o pacote que queremos instalar.
  • state: present é a parte “declarativa” principal. Não estamos dizendo “instale agora”. Estamos dizendo “garanta que ele esteja presente”.
    • Se o pacote estiver ausente, o Ansible o instalará.
    • Se ele já estiver instalado, o Ansible não fará nada. Essa propriedade é chamada de idempotência.

A idempotência é fundamental no gerenciamento de configuração. Ela significa que você pode executar a mesma automação repetidamente com segurança e esperar resultados consistentes, sem efeitos colaterais duplicados.

Verifique a indentação:

  • tasks deve ficar alinhado com become.
  • - name deve ter indentação de 2 espaços.
  • apt deve ficar alinhado com name.
  • name e state devem ter uma indentação adicional abaixo de apt.

Salve o arquivo.

Adicionar uma tarefa de serviço

Instalar o software não é suficiente; precisamos garantir que o programa esteja em execução. Para isso, usamos o módulo service.

Isso também mostra como os playbooks expressam o estado do sistema em camadas. Uma tarefa garante que o pacote exista, enquanto outra garante que o serviço esteja ativo. Juntas, elas descrevem o estado final que o host deve alcançar.

Adicione uma segunda tarefa à lista no arquivo site.yml.

---
- hosts: webservers
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present

    - name: Start nginx
      service:
        name: nginx
        state: started

Entenda o código:

  • service: é o módulo que gerencia serviços do sistema, como o systemctl.
  • state: started garante que o serviço esteja em execução. Se ele estiver parado, o Ansible o iniciará.

Importante: o - da segunda tarefa deve ficar exatamente alinhado com o - da primeira tarefa.

Salve o arquivo e saia do nano (Ctrl+X, depois Y e, por fim, Enter).

Executar o Playbook

Agora vem a parte prática: executar sua automação!

Usaremos o comando ansible-playbook. Precisamos informar qual playbook executar (site.yml) e qual inventário usar (hosts.ini).

Execute este comando:

ansible-playbook site.yml -i hosts.ini

Observe a saída. Você verá:

  1. Gathering Facts: primeiro, o Ansible verifica os detalhes do sistema.
  2. Install nginx: será exibido como changed (em amarelo), pois o pacote precisou ser instalado.
  3. Start nginx: será exibido como changed (em amarelo) se o serviço precisou ser iniciado.

Se você executar exatamente o mesmo comando uma segunda vez, a saída aparecerá em verde e exibirá ok. Isso significa: “Tudo já está no estado desejado, portanto nada foi alterado.”

Por fim, verifique manualmente se o Nginx está em execução:

systemctl status nginx

Você deverá ver "Active: active (running)".

Resumo

Neste laboratório, você escreveu seu primeiro Playbook do Ansible. Você aprendeu:

  1. Sintaxe YAML: como estruturar um playbook usando a indentação correta.
  2. Plays: como definir hosts (onde executar) e become (usar sudo).
  3. Tarefas: como usar módulos como apt (para instalar) e service (para iniciar).
  4. Idempotência: o conceito de que executar o playbook várias vezes é seguro e produz resultados estáveis.

Você passou de comandos executados manualmente para a definição de “Infraestrutura como Código”.