Introdução ao Ansible e Automação de Rede

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.

💡
Pro Tip: A idempotência do Ansible garante que reexecutar um playbook não duplica configurações, tornando-o seguro para atualizações de rede.

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.

Modelo Push do Ansible

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.

  • ansible-jinja2

    AWX/Ansible Tower oferece uma interface web para gerenciar automação em grandes redes (mais detalhes na Lição 6).

    ansible-tower


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

arquitetura ansible

💡
Pro Tip: Organize o inventário por tipo de dispositivo ou localização (ex.: 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.

💡
Pro Tip: Use 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?

  1. Pesquise no Ansible Galaxy.

  2. Consulte a documentação oficial.

  3. Liste módulos locais: ansible-doc -l cisco.ios.

processo_de_uso_de_colecoes

💡
Pro Tip: Verifique a versão da coleção no Galaxy para garantir compatibilidade com sua versão do Ansible.

Exercício Prático

Laboratório BGP MED

  1. 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
  1. Testar Conectividade:
ansible all -m ping -i inventory.yaml
  1. 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.

💡
Pro Tip: Se o ping falhar, verifique a conectividade SSH e confirme que ansible_network_os corresponde ao tipo do dispositivo.
Seu Progresso

Faça login para salvar seu progresso.

Progresso do Capítulo