Ansible
1
O que é o Ansible?
O Ansible é uma ferramenta open-source usada pra automatizar tarefas de TI, como
configurar servidores, fazer deploy de apps e manter tudo rodando de forma padronizada.
Sem precisar instalar nada nas máquinas destino
Usa YAML
Substitui scripts tradicionais com Playbooks organizados
2
Pra que serve o Ansible?
Você pode automatizar:
Provisionamento: configurar servidores do zero
Gerenciamento de configuração: manter tudo igual
Deploy contínuo: automatizar publicação de apps
Segurança e conformidade: seguir padrões de segurança
3
Por que usar?
Sem agente: não precisa instalar nas máquinas
Simples: usa YAML (fácil de ler e escrever)
Poderoso: automatiza de tarefas simples a complexas
Escalável: roda em infra pequena ou gigantesca
4
Componentes principais
Playbooks
Os Playbooks são onde você escreve as tarefas, em YAML e dentro desses YAML existem
variáveis, loops e condições
Inventário
Lista os servidores onde as tarefas vão rodar em Formatos: .ini , .yaml ele pode
agrupar: web, banco e e-mail
5
Componentes principais
Módulos e Plugins
Blocos prontos de código que fazem tarefas específicas
Exemplos: instalar pacotes, criar usuários, configurar firewall
Variáveis
Guardam info como IPs, nomes, portas
Tipos: string, número, booleano, lista, dicionário
Templates (Jinja2)
É usado pra gerar arquivos com variáveis, dinamicamente
6
YAML — O que é e por que é importante?
YAML = "Yet Another Markup Language"
Usado em arquivos de configuração, inclusive nos Playbooks do Ansible
Sintaxe
Extensões: .yml ou .yaml
Usa espaços (sem tab!)
Comentários com #
--- começa o documento
7
YAML — O que é e por que é importante?
Tipos de dados YAML
1. Sequência:
- item1
- item2
2. Mapeamento (chave-valor):
nome: Juan
idade: 19
8
YAML — O que é e por que é importante?
3. Escalar: string, número, booleano etc.
Exemplo de estrutura
Store:
Bakery:
- Sourdough loaf
- Bagels
Cheesemonger:
- Blue cheese
- Feta
Convertido em JSON:
{"Store": {"Bakery": ["Sourdough loaf", "Bagels"], "Cheesemonger": ["Blue cheese", "Feta"]}}
9
Gerenciando usuários com Playbook
1. Adicionar um único usuário
Criar um .yml com dados do usuário
Rodar com:
ansible-playbook -i inventory.file add-user.yml
Verificar:
ipa user-show <nome_do_usuario>
10
Gerenciando usuários com Playbook
2. Adicionar múltiplos usuários
Escrever todos no .yml com uma lista users
Informar nome, email, UID etc
3. A partir de um JSON
Criar JSON com os dados
Usar include_vars no playbook
4. Remover usuários
Criar playbook com state: absent
Rodar normalmente pra remover
11
Gerenciando usuários com Playbook
Dicas:
Não remova o admin!
Evite criar usuários locais no IdM
Comandos úteis
Ver usuário:
ipa user-show <nome>
Rodar playbook:
ansible-playbook -i inventory.file playbook.yml
12
Configurando o Ansible
1. Arquivo principal:
/etc/ansible/ansible.cfg
Gerencia:
Local do inventário
Plugins
Timeout SSH
Número de forks
Pode ser sobrescrito com variável de ambiente $ANSIBLE_CONFIG
13
Configurando o Ansible
2. Scripts vs Playbooks
Scripts: difíceis de manter
Playbooks: estruturados, claros e reaproveitáveis
Inventário pode ter hierarquia (pai-filho)
Prioridade de variáveis:
1. --extra-vars
2. role vars > include vars > play vars > group vars > host vars > default vars
14
Escopos das variáveis
Você pode definir variáveis:
Por host (no inventário)
Por grupo (web, banco, etc.)
No Playbook
Por linha de comando
15
Casos de uso comuns
Simples:
Criar usuários
Instalar pacotes
Complexo:
Configurar firewall
Fazer deploy completo de apps
16
Debug e registro
Debug:
- name: mostrar variável
debug:
var: minha_variavel
Registro:
- name: armazenar saída
command: uptime
register: resultado
Usar depois:
- debug:
var: resultado.stdout 17
Módulos e Loops
Exemplos de módulos:
firewalld : configura firewall
lineinfile : edita arquivos
package : instala apps (nginx, git, etc.)
Loop:
with_items:
- nginx
- git
18
Gerenciando o Inventário
Estático:
Arquivo simples ( /etc/ansible/hosts )
Dinâmico:
Ideal pra nuvem ou infra escalável
Usa scripts ou APIs pra gerar o inventário em tempo real
Exemplo de inventário (formato INI)
[web]
192.168.1.10
192.168.1.11
[db]
192.168.1.20
19
Documentações úteis
Tutorial IBM Cloud X Ansible
Oque é o Ansible
Curso Udemy sobre Ansible
Documentação oficial do Ansible
Tutorial YAML
20