O que é o Ansible?
Ferramenta de automação de provisionamento, gerenciamento de configurações, implantação de aplicações, orquestração entre outros processos.
Principais Características
1
Agentless
Não precisa de software instalado nos sistemas gerenciados.
2
Idempotência
Garante que, independentemente de quantas vezes uma tarefa seja executada, o resultado final será o mesmo.
3
Simples e Fácil de Usar
Ansible utiliza YAML para definir a infraestrutura e os processos de automação.
Arquitetura do Ansible
Control Node
O servidor onde o Ansible está instalado e de onde os comandos são executados.
Managed Nodes
Máquinas que serão configuradas e gerenciadas pelo Ansible.
Inventário
Arquivo que lista os hosts (geralmente em /etc/ansible/hosts).
Componentes do Ansible
Módulos
Funções que Ansible utiliza para executar tarefas nos hosts remotos.
Playbooks
Descrições das configurações, tarefas e procedimentos que serão executados.
Tasks
São as unidades básicas de trabalho de um playbook.
Recursos do Ansible
1
Variáveis
Armazenam valores que podem ser referenciados ao longo de todo o playbook.
2
Tags
Rótulos que podem ser atribuídos a plays e tasks.
3
Handlers
São tarefas executadas apenas quando eventos específicos ocorrem.
4
Facts
São informações sobre o sistema em que o Ansible está sendo executado.
5
Roles
Coleção de arquivos YAML contendo tarefas, variáveis, manipuladores e outros componentes importantes na automação.
Principais módulos
ansible.builtin.apt
Utilizado para realizar instalação de pacotes adicionais nos hosts baseados em Debian.
Principais módulos
ansible.builtin.copy
Utilizado para copiar arquivos ou diretórios da máquina local ou remota para um local do host.
Principais módulos
ansible.builtin.file
Utilizado para realizar o gerenciamento de arquivos ou diretórios da máquina nos hosts. Bastante útil para criar, alterar permissões, mover ou excluir arquivos e diretórios.
Principais módulos
ansible.builtin.shell
Utilizado para realizar comandos com redirecionamento nos hosts.
Principais módulos
ansible.builtin.include_tasks
Utilizado para importar um arquivo contendo uma lista de tarefas para ser executada no playbook.
Principais módulos
ansible.builtin.import_playbook
Utilizado para importar um arquivo contendo uma lista de plays para ser executado.
Principais filtros
ansible.builtin.from_json
Converte uma string JSON em uma variável Ansible
Principais filtros
ansible.builtin.difference
Realiza a comparação entre listas
Principais filtros
ansible.builtin.split
Realiza a comparação entre listas
Componentes básicos de um Playbook
Name
Cada playbook possui
um nome que descreve o que será feito
Hosts
Determina as máquinas
na qual aquele
playbook será executado
Taks
Cada ação executada por um playbook é chamada de task
Playbooks: Loops
Os loops permitem que uma tarefa seja aplicada em vários pacotes, arquivos e usuários diferentes várias vezes. Ansible dá suporte a diferentes estruturas de repetição.
Playbooks: Loops em dicionários
Além de listas, Ansible permite iterar sobre dicionários. No caso acima, ele cria um usuário e sua respectiva senha.
Playbooks: Loop Control
O loop control garante que exista um controle sobre determinados itens do loop, além de permitir modificar seu comportamento. No caso acima, as variáveis do loop serão renomeadas para user_info + variável.
Playbooks: Loop e Register
O Register permite que cada iteração tenha seu resultado armazenado em uma variável.
Playbooks: Loops em mais de uma lista
Ansible dá suporte para iteração em 2 ou mais listas através do plugin zip.
PlayBooks: Blocks
O conceito de blocks permite agrupar várias tarefas em uma única unidade lógica, o que facilita a organização e o tratamento de erros. Com o uso de blocks, você pode definir um conjunto de tarefas que podem ser executadas como uma única entidade e aplicar estratégias de tratamento de erros, como rescue e always.
O que são Blocks?
Por qual motivo usar Blocks?
Organização: Facilita a leitura e a manutenção do playbook, agrupando tarefas relacionadas.
Tratamento de Erros: Permite um gerenciamento mais eficiente de erros, com ações específicas definidas para falhas e ações que sempre devem ocorrer.
Flexibilidade: Proporciona uma forma de aplicar condições de execução e agrupamento de tarefas em um nível mais alto.
Exemplo: Blocks
Playbooks: Condicionais
As condicionais no Ansible são feitas utilizando a cláusula when. Essa cláusula pode ser aplicada a qualquer tarefa, bloco de tarefas ou até plays inteiros, e a condição é baseada no estado de variáveis, saídas de comandos ou fatos coletados do sistema.
São uma maneira poderosa de tornar seus playbooks mais dinâmicos e adaptáveis.
Tipos de Condicionais
Você pode usar variáveis definidas em seu playbook ou inventário para condicionar a execução de uma tarefa.
Baseado em uma variável
Tipos de Condicionais
Baseado em fatos do sistema
O Ansible coleta informações sobre o sistema remoto, conhecidas como "fatos". Esses fatos podem ser usados para aplicar condições.
Tipos de Condicionais
Baseado na saída de uma tarefa anterior
Você pode condicionar a execução de uma tarefa com base no resultado de uma tarefa anterior.
Tipos de Condicionais
Condições em Blocos
Assim como as tarefas individuais, você pode aplicar condicionais a blocks, o que permite que um conjunto inteiro de tarefas seja executado apenas se a condição for atendida
Exemplo: Condicionais
Instalação e configuração do ambiente
ff1 - Realizar a instalação do ansible:
sudo apt install ansible
2 - Alterar o arquivo visudo da seguinte forma:
%sudo ALL=(ALL) NOPASSWD: ALL
3 - Instalar ssh (Tanto no controlador quanto nos hosts):
sudo apt install ansible
4 - Gerar chave pública do ssh no controlador:
ssh-keygen -t rsa -b 4096
5 - Copiar chave pública do controlador para o host: ssh-copy-id host@x.x.x.x
Limitações