O que é Ansible?
Ansible é uma ferramenta de automação de código aberto que simplifica a configuração de servidores, aplicativos e dispositivos de rede. Imagine passar horas acessando switches via CLI para atualizar VLANs ou ACLs, com risco de erros manuais. Com Ansible, você automatiza essas tarefas em minutos, garantindo consistência em toda a rede!
Ansible usa arquivos YAML, simples e legíveis, para descrever o estado desejado dos sistemas (ex.: "VLAN 10 existe em todos os switches"). Sua linguagem declarativa permite focar no resultado, sem precisar escrever comandos passo a passo.
Principais Características do Ansible
-
Sem Agente: Não é necessário instalar software nos dispositivos. Ansible gerencia roteadores Cisco via SSH.
-
Modelo Baseado em Push: A partir do seu laptop (nó de controle), Ansible envia configurações para 100 switches de uma vez.
-
Sintaxe YAML: Usa arquivos simples, legíveis por humanos, para definir configurações.
-
Operações Idempotentes: Reexecutar um playbook para configurar uma ACL não a aplica novamente se já estiver presente.
-
Suporte Multiplataforma: Funciona com Cisco, Juniper, Arista e outros dispositivos de rede.
Como o Ansible Funciona em Redes?
Diferente da automação de servidores, onde comandos rodam localmente, na automação de rede:
-
As tarefas são executadas no nó de controle (máquina com Ansible).
-
Conexões usam SSH, NETCONF (protocolo estruturado, comum em Juniper) ou APIs (ex.: REST para Cisco ACI).
-
Templates Jinja2 geram configurações dinâmicas. Exemplo:
interface {{ interface_name }}
ip address {{ ip_address }} {{ subnet_mask }}
Isso cria configurações únicas para cada dispositivo com base em dados do inventário.
-
AWX/Ansible Tower oferece uma interface web para gerenciar automação em grandes redes (mais detalhes na Lição 6).
Arquitetura do Ansible
Ansible é composto por componentes que trabalham juntos para automatizar redes:
-
Nó de Controle: A máquina onde o Ansible está instalado e de onde a automação é iniciada.
-
Nós Gerenciados: Dispositivos-alvo, como roteadores e switches.
-
Inventário: Um arquivo listando dispositivos, organizados por grupos (ex.:
core_switches
,edge_routers
). -
Módulos: Tarefas reutilizáveis, como
cisco.ios.ios_config
para enviar comandos CLI a dispositivos Cisco. -
Playbooks: Arquivos YAML que definem a sequência de tarefas de automação.
-
Coleções: Pacotes com módulos, plugins e documentação para vendors específicos (ex.:
cisco.ios
).
dc1_routers
) para facilitar a execução de playbooks em grupos específicos.Ansible para Automação de Rede
Ansible resolve desafios comuns de rede, como configurações manuais inconsistentes ou verificações demoradas. Aqui estão os principais casos de uso:
Caso de Uso | Exemplo |
---|---|
Gerenciar Configurações | Aplicar configs consistentes em múltiplos dispositivos. |
Verificar Conformidade | Garantir que dispositivos seguem políticas de segurança. |
Provisionar Serviços | Configurar VLANs, ACLs ou novas conexões. |
Backup e Restauração | Backup regular de configurações e restauração quando necessário. |
Atualizações de Software | Atualizar firmware |
Coletar Dados | Obter informações de diagnóstico para troubleshooting |
Exemplo: Para configurar VLANs, Ansible garante que todos os switches tenham o mesmo ID e nome de VLAN, reduzindo erros humanos.
ansible-vault
para criptografar dados sensíveis, como strings de comunidade SNMP, nos seus playbooks.Configurando o Ambiente Ansible
Requisitos de Instalação
-
Linux, macOS ou Windows com WSL.
-
Python 3.8 ou superior.
-
Conectividade SSH com dispositivos de rede.
-
Credenciais de dispositivos (usuário/senha ou chaves SSH).
Instalando o Ansible
# Usando pip (recomendado)
python3 -m pip install ansible
# No Ubuntu/Debian
sudo apt update
sudo apt install ansible
Instalando Coleções de Rede
# Cisco IOS
ansible-galaxy collection install cisco.ios
# Juniper Junos
ansible-galaxy collection install junipernetworks.junos
# Arista EOS
ansible-galaxy collection install arista.eos
Configuração Básica
-
ansible.cfg: Arquivo de configuração global do Ansible.
-
Inventário: Define dispositivos e grupos.
-
Playbooks: Execução das ações desejadas.
Verificando a Instalação
# Verificar versão do Ansible
ansible --version
# Listar coleções instaladas
ansible-galaxy collection list
# Testar conectividade
ansible all -m ping -i inventory.yaml
Visão Geral sobre Ansible Collections
Coleções são pacotes modulares que agrupam módulos, plugins e documentação para vendors específicos, como Cisco ou Juniper. Pense nelas como "caixas de ferramentas" para automação de rede.
Exemplo: Coleção cisco.ios
-
cisco.ios.ios_config
: Envia comandos CLI a dispositivos Cisco. -
cisco.ios.ios_facts
: Coleta informações, como versão do IOS ou número de série.
Como encontrar coleções?
-
Pesquise no Ansible Galaxy.
-
Consulte a documentação oficial.
-
Liste módulos locais:
ansible-doc -l cisco.ios
.
Exercício Prático
- Criar um Inventário:
all:
hosts:
router1:
ansible_host: 172.20.20.11
ansible_user: admin
ansible_password: autonetops
ansible_connection: network_cli
ansible_network_os: cisco.ios.ios
# complete até o router4
- Testar Conectividade:
ansible all -m ping -i inventory.yaml
- Escrever um Playbook:
- name: Coletar versão do dispositivo
hosts: router1
tasks:
- name: Obter versão
cisco.ios.ios_facts:
register: resultado
- debug:
msg: "Versão: {{ resultado.ansible_facts.ansible_net_version }}"
Para executá-lo: ansible-playbook <path_do_arquivo.yaml>
Saída esperada: O playbook exibe a versão do IOS (ex.: "17.12.1"), confirmando que funcionou.
ping
falhar, verifique a conectividade SSH e confirme que ansible_network_os
corresponde ao tipo do dispositivo.