Por: Adelmo da Silva – consultor de sistemas
Depois do último artigo, Ansible na prática: instalação e configuração #1, hoje daremos mais um passo rumo à automação. Vamos entender a estrutura de um playbook no Ansible. Como já mostrei nos artigos anteriores, um playbook é um arquivo YAML que contém as instruções para a automação de tarefas em um ambiente de TI. Ele descreve o conjunto de acções que o Ansible deve executar em um conjunto de servidores pré-definidos no arquivo de inventário do Ansible. No playbook indicamos em qual grupo de servidores, ou dispositivos (lembrando que o Ansible trabalha em tanto com Servidores quanto dispositivos de rede, tais como Switches, Roteadores, etc).
O esqueleto de um playbook
A primeira coisa que é necessário, muito necessário, extremamente necessário, é entender a indentação de um arquivo de playbook. Uma vez que a base para este arquivo é a linguagem YAML, toda sua estrutura se baseia em uma indentação de três espaços a partir de início da linha superior. Calma! Eu explico. Por exemplo:
tasks:
– name: Coletando o FQDN do servidor
shell:
command: hostname
Repare que entre a linha TASKS, que marca o início das tarefas e a declaração da primeira tarefa (- name) começa a partir da terceira letra (‘s’) da linha de cima. E, na linha abaixo do módulo SHELL, o COMMAND inicia na terceira letra (‘e’) do módulo. Pois, toda linha que é parte interna de uma linha anterior, deve ser iniciada na terceira letra de sua predecessora. Isso é a indentação do arquivo YAML de um playbook. No começo, pode parecer confuso, mas ao avançarmos, vai ficando mais simples. Agora, vamos ao que interessa: a estrutura.
Vamos lá! Bora meter a mão na massa!
Em um playbook básico, temos a seguinte estrutura:
Créditos: D.R
- Separadores YAML: são usados para indicar o início de um novo documento YAML. Esses separadores são opcionais e podem ser usados para separar vários documentos YAML em um único arquivo.
- Descrição Inicial do Playbook: descrição do objectivo final do playbook. Nesta secção costuma-se declarar várias opções, tais como descrito na imagem:
- Name: Descrição geral do playbook
- Hosts: grupo / hostname / IP declarado no inventário do ansible
- Become: é utilizada para executar comandos ou tarefas como um usuário diferente, geralmente como um superusuário ou root.
- Tasks: identifica o início da seções onde serão criadas as tarefas
- Descrição de uma tarefa:
- Name: Descrição da tarefa
- Apt: módulo a ser utilizado no playbook
- Update_cache: opção interna do módulo
O Ansible possui milhares de módulos para vários sistemas operacionais, cloud computing e dispositivos de rede, entre outros.
Uma regra importante para um playbook é a estrutura lógica das tarefas. Por exemplo, é necessário actualizar o sistema antes de se instalar um MySql e o PHP em um Ubuntu. Para isso é indispensável que pense antes de montar um playbook. Pare, pense e escreva. Três passos para uma bela estrutura em seu playbook. Mas não basta só falar, vamos na prática.
Vamos criar um playbook que actualize o cache, instale o Apache2 e depois o MariaDB no ubuntu. Logo depois, sejam iniciados e habilitados após o boot:
—
– name: Atualizar cache, instalar Apache2 e MariaDB
hosts: webservers
become: true
tasks:
– name: Atualizar cache do apt
apt:
update_cache: yes
– name: Instalar o Apache2
apt:
name: apache2
state: present
– name: Instalar o MariaDB
apt:
name: mariadb-server
state: present
– name: Iniciar e habilitar o Apache2
service:
name: apache2
state: started
enabled: yes
– name: Iniciar e habilitar o MariaDB
service:
name: mariadb
state: started
enabled: yes
Pronto. Salve este playbooks com o nome de webserverss.yaml. Agora que temos nosso playbook, vamos rodar este camarada. Para isso, vamos usar o comando ansible-playbook, que é o comando próprio para executar um playbook no ansible:
ansible-playbook webserverss.yaml
Após este comando, você deverá ver a saída abaixo:
PLAY [Atualizar cache, instalar Apache2 e MariaDB] ************************************
TASK [Atualizar cache do apt] *********************************************************
changed: webservers
TASK [Instalar o Apache2] *************************************************************
changed: webservers
TASK [Instalar o MariaDB] ************************************************************
changed: webservers
TASK [Iniciar e habilitar o Apache2] **************************************************
changed: webservers
TASK [Iniciar e habilitar o MariaDB] **************************************************
changed: webservers
PLAY RECAP ***************************************************************************
seu-servidor : ok=5 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
A saída mostra o status de cada tarefa executada. Se uma tarefa resultou em alterações (instalação ou configuração), é exibido “changed”. Caso contrário, é exibido “ok”. No final, um resumo é fornecido, mostrando o número total de tarefas executadas, quantas tiveram alterações, quantas falharam, etc. Neste exemplo, todas as tarefas foram concluídas com sucesso (ok) e resultaram em alterações (changed).
Pronto! Temos um sistema actualizado e com o MariaDB e Apache instalados e prontos para uso.
Imagine fazer isso em 10, 20, ou mais servidores ao mesmo tempo? Imagine o tempo economizado utilizando este tipo de playbook? Teríamos tempo de sobra para aquele cafezinho, hein…?
Até a próxima Ansible na Prática.