1 of 30

O que é o Ansible?

Ferramenta de automação de provisionamento, gerenciamento de configurações, implantação de aplicações, orquestração entre outros processos.

2 of 30

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.

3 of 30

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).

4 of 30

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.

5 of 30

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.

6 of 30

Principais módulos

ansible.builtin.apt

Utilizado para realizar instalação de pacotes adicionais nos hosts baseados em Debian.

7 of 30

Principais módulos

ansible.builtin.copy

Utilizado para copiar arquivos ou diretórios da máquina local ou remota para um local do host.

8 of 30

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.

9 of 30

Principais módulos

ansible.builtin.shell

Utilizado para realizar comandos com redirecionamento nos hosts.

10 of 30

Principais módulos

ansible.builtin.include_tasks

Utilizado para importar um arquivo contendo uma lista de tarefas para ser executada no playbook.

11 of 30

Principais módulos

ansible.builtin.import_playbook

Utilizado para importar um arquivo contendo uma lista de plays para ser executado.

12 of 30

Principais filtros

ansible.builtin.from_json

Converte uma string JSON em uma variável Ansible

13 of 30

Principais filtros

ansible.builtin.difference

Realiza a comparação entre listas

14 of 30

Principais filtros

ansible.builtin.split

Realiza a comparação entre listas

15 of 30

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

16 of 30

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.

​

​

17 of 30

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.

​

​

18 of 30

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.

​

​

19 of 30

Playbooks: Loop e Register

O Register permite que cada iteração tenha seu resultado armazenado em uma variável.

​

20 of 30

Playbooks: Loops em mais de uma lista

Ansible dá suporte para iteração em 2 ou mais listas através do plugin zip.

21 of 30

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.

  • Rescue: Define tarefas que serão executadas se qualquer tarefa dentro do block falhar. Isso é útil para limpar ou reverter ações quando ocorre um erro. É opcional.

​

  • Always: Define tarefas que devem ser executadas sempre, independentemente de ter ocorrido um erro ou não. Isso é útil para ações como limpeza ou registro de logs. É opcional

22 of 30

Exemplo: Blocks

23 of 30

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.

​

24 of 30

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

25 of 30

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.

​

26 of 30

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.

​

27 of 30

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

​

28 of 30

Exemplo: Condicionais

29 of 30

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

30 of 30

  • Pouco suporte para Windows
  • Dependências externas
  • Não é uma aplicação que armazena o seu estado
  • Debugging relativamente complicado
  • Problemas com escalabilidade, pois depende de um nó central

​

Limitações