Organização com Roles

AnsibleBeginner
Pratique Agora

Introdução

Quando você começa a usar o Ansible, colocar tudo em um único arquivo grande, como playbook.yml, funciona bem. Mas, à medida que sua automação cresce para centenas de linhas, esse arquivo se torna difícil de organizar.

A solução são as roles do Ansible.

As roles são como pastas em um arquivo. Em vez de manter um documento enorme, você separa o conteúdo em pastas lógicas: uma pasta para tarefas de "Servidor Web", outra para tarefas de "Banco de Dados" e assim por diante.

As roles são importantes porque, com o tempo, a automação se aproxima da engenharia de software. Quando os playbooks ultrapassam algumas tarefas, estrutura, nomenclatura e reutilização se tornam tão importantes quanto fazer a primeira execução funcionar.

Neste laboratório, você vai:

  1. Criar uma estrutura padronizada de Role usando ansible-galaxy.
  2. Mover as tarefas para essa Role.
  3. Executar a Role a partir de um "Playbook principal" simples.

As roles são importantes porque a automação escalável precisa de estrutura. À medida que as bases de código crescem, a organização se torna tão importante quanto obter a primeira execução bem-sucedida.

Inicializar uma Role

Primeiro, vamos criar a estrutura de diretórios. Você poderia criar todas as pastas manualmente, mas o Ansible inclui uma ferramenta chamada ansible-galaxy que faz isso por você.

Esse layout padrão é útil porque oferece locais previsíveis para tarefas, variáveis, arquivos, templates e handlers em cada role. Quando a estrutura permanece consistente, as equipes conseguem ler a automação umas das outras com mais facilidade.

Vá para o diretório do projeto:

cd ~/project

Crie um diretório para armazenar suas roles:

mkdir roles

Agora, crie uma nova role chamada myrole. Pense nisso como a criação de um "pacote" ou "módulo" para sua automação.

ansible-galaxy init roles/myrole

Veja o que foi criado:

ls -R roles/myrole

Você verá várias pastas (tasks, handlers, vars etc.).

  • tasks: onde ficam as etapas reais, como instalar, iniciar e copiar.
  • vars: onde ficam as variáveis.
  • files: onde ficam os arquivos estáticos, como imagens.

Hoje, vamos nos concentrar na pasta tasks.

Definir as tarefas da Role

Agora precisamos adicionar algumas ações à nossa role. A lista principal de tarefas de uma role fica em tasks/main.yml.

Vamos criar uma tarefa simples que instala o comando tree, um utilitário útil para visualizar estruturas de diretórios.

Abra o arquivo de tarefas da role:

nano roles/myrole/tasks/main.yml

Adicione o conteúdo a seguir. Observe que não começamos com tasks: aqui, porque já estamos dentro do arquivo de tarefas.

---
## tasks file for roles/myrole
- name: Ensure tree is installed
  apt:
    name: tree
    state: present
  become: yes

Diferença importante: em um playbook normal, você tem uma seção tasks:. Dentro de uma role, o próprio arquivo é a lista de tarefas; por isso, basta começar a listá-las diretamente.

Essa separação é uma das razões pelas quais as roles melhoram a reutilização. A role concentra uma parte específica da lógica de automação, enquanto o playbook decide quando e onde incluí-la.

Salve e saia.

Criar o Playbook principal

Agora você tem uma Role, mas uma Role não é executada por si só. Você precisa de um "Playbook principal" para chamá-la.

Crie um arquivo chamado site.yml na pasta principal do projeto:

nano ~/project/site.yml

Este playbook será muito curto. Ele apenas diz: "Nestes hosts, execute esta role".

A partir desse ponto, o playbook passa a funcionar mais como um orquestrador do que como um contêiner de todos os detalhes. Essa é a mudança de arquitetura que as roles devem proporcionar.

---
- hosts: localhost
  connection: local
  roles:
    - myrole

Entenda o código:

  • roles:: em vez de uma lista tasks:, fornecemos uma lista de roles.
  • - myrole: o Ansible procura uma pasta chamada myrole dentro do diretório roles/ e executa o conteúdo de tasks/main.yml.

Salve e saia.

Validar e executar

Antes de executar, vamos verificar se não cometemos erros de digitação. O Ansible possui um verificador de sintaxe integrado.

Execute este comando:

ansible-playbook -i inventory --syntax-check site.yml

Se tudo estiver correto, o comando exibirá apenas playbook: site.yml.

Se houver erros, leia a mensagem com atenção: geralmente ela indica o número exato da linha onde a indentação está incorreta.

Agora, execute o playbook de verdade:

ansible-playbook -i inventory site.yml

Você deverá ver a execução da tarefa da sua role: TASK [myrole : Ensure tree is installed] ... changed

Resumo

Neste laboratório, você aprendeu a maneira "profissional" de estruturar o Ansible.

  1. Inicializou uma Role: usou ansible-galaxy para criar a estrutura padrão de pastas.
  2. Definiu tarefas: colocou sua lógica dentro de tasks/main.yml.
  3. Usou a Role: chamou a role a partir de um playbook principal site.yml limpo e simples.

À medida que você escrever mais automações, criará roles para tudo, como apache, mysql e common, tornando seu código reutilizável e fácil de ler.