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

Introdução à Automação de Rede

O que é Automação de Rede?

Automação de rede é o processo de automatizar a configuração, gerenciamento, teste, implantação e operações de dispositivos de rede físicos e virtuais. Usando software, a automação de rede elimina os processos manuais anteriormente realizados por administradores de rede, como configurar novos dispositivos, gerenciar alterações de configuração e monitorar o desempenho da rede.

Benefícios da Automação de Rede

  • Redução de Erros Humanos: A automação elimina o risco de erros de digitação e configurações incorretas que podem causar interrupções na rede.

  • Aumento da Eficiência: Tarefas que levariam horas ou dias para serem concluídas manualmente podem ser executadas em minutos.

  • Consistência: Garante que as configurações de rede sejam aplicadas de forma consistente em todos os dispositivos.

  • Escalabilidade: Permite gerenciar grandes redes com menos recursos.

  • Conformidade Aprimorada: Processos automatizados podem impor políticas de segurança e requisitos regulatórios.

  • Implantação Mais Rápida: Novos serviços e configurações podem ser implantados mais rapidamente.

  • Melhor Documentação: Ferramentas de automação mantêm registros de todas as alterações e configurações.

Evolução do Gerenciamento de Rede

  1. Configuração Manual via CLI: Método tradicional onde engenheiros acessam cada dispositivo individualmente.

  2. Scripts e Ferramentas Personalizadas: Automação básica usando scripts (Python, Bash, Perl).

  3. Ferramentas de Gerenciamento de Configuração: Ferramentas mais sofisticadas como Ansible, Puppet e Chef.

  4. Redes Definidas por Software (SDN): Plano de controle centralizado com interfaces programáveis.

  5. Redes Baseadas em Intenção: Especificação de resultados desejados em vez de configurações específicas.

Introdução ao Ansible

O que é Ansible?

Ansible é uma ferramenta de automação de código aberto que oferece uma maneira simples de automatizar a infraestrutura de TI, incluindo servidores, aplicativos e dispositivos de rede. Ele usa uma linguagem declarativa para descrever configurações de sistemas, tornando-o acessível tanto para desenvolvedores quanto para administradores de sistemas.

Principais Características do Ansible

  • Arquitetura Sem Agente: Não é necessário instalar agentes nos dispositivos gerenciados.
  • Modelo Baseado em Push: A configuração é enviada de um nó de controle central.
  • Sintaxe YAML: Usa arquivos YAML simples e legíveis por humanos para configuração.
  • Operações Idempotentes: Executar o mesmo playbook várias vezes produz o mesmo resultado.
  • Extensível: Pode ser estendido com módulos, plugins e scripts personalizados.
  • Suporte Multiplataforma: Funciona com vários sistemas operacionais e dispositivos de rede.

Arquitetura do Ansible

  • Nó de Controle: A máquina onde o Ansible está instalado e de onde a automação é iniciada.

  • Nós Gerenciados: Os dispositivos-alvo sendo automatizados (servidores, dispositivos de rede, etc.).

  • Inventário: Uma lista de nós gerenciados organizados em grupos.

  • Módulos: Unidades de código reutilizáveis que executam tarefas específicas.

  • Playbooks: Arquivos YAML que definem tarefas de automação e sua sequência.

  • Coleções: Distribuições de plugins, papéis, módulos e documentação.

Ansible para Automação de Rede

Por que Ansible para Automação de Rede?

  • Suporte a Múltiplos Fornecedores: Funciona com dispositivos da Cisco, Juniper, Arista e muitos outros.
  • Sem Necessidade de Agentes: Particularmente importante para dispositivos de rede com recursos limitados.
  • Sintaxe Familiar: Engenheiros de rede podem aprender uma única ferramenta para várias plataformas.
  • Abordagem Declarativa: Especifique o estado desejado em vez de procedimentos passo a passo.
  • Capacidades de Integração: Pode se integrar com ferramentas e fluxos de trabalho existentes.

Principais Diferenças na Automação de Rede

  • Local de Execução: Os módulos de rede são executados no nó de controle, não nos dispositivos gerenciados.
  • Métodos de Conexão: Usa network_cli, netconf ou httpapi em vez de SSH para execução de comandos.
  • Autenticação: Lida com vários métodos de autenticação, incluindo o modo enable.
  • Desafios de Idempotência: Dispositivos de rede muitas vezes não possuem APIs que relatam o estado atual.
  • Módulos Específicos de Plataforma: Módulos diferentes para diferentes sistemas operacionais de rede.

Casos de Uso da Automação de Rede

  • Gerenciamento de Configuração: Implantação e manutenção de configurações de dispositivos.

  • Verificação de Conformidade: Garantir que os dispositivos atendam aos requisitos de segurança e regulamentação.

  • Provisionamento de Rede: Configuração de novos dispositivos e serviços.

  • Backup e Restauração: Backup regular de configurações e restauração quando necessário.

  • Atualizações de Software: Gerenciamento de atualizações de firmware e sistema operacional em toda a rede.

  • Solução de Problemas: Coleta de informações de diagnóstico de múltiplos dispositivos.

Configurando o Ambiente Ansible

Requisitos de Instalação

  • Linux, macOS ou Windows com WSL (Windows Subsystem for Linux)

  • Python 3.8 ou superior

  • Conectividade SSH com dispositivos de rede

  • Credenciais de dispositivos de rede

Instalando o Ansible

# Using pip (recommended for most users)
python3 -m pip install ansible

# On Ubuntu/Debian
sudo apt update
sudo apt install ansible

# On macOS with Homebrew
brew install ansible

Visão Geral sobre Ansible Collections

Ansible Collections são pacotes modulares que agrupam conteúdo relacionado ao Ansible, como playbooks, roles, módulos, plugins e documentação, em um formato reutilizável e distribuível. Elas permitem organizar e compartilhar automações de forma mais estruturada, facilitando a manutenção e a integração com diferentes sistemas ou provedores (como AWS, Cisco, Red Hat, etc.). Cada collection é versionada independentemente, o que melhora a compatibilidade e a escalabilidade.

Como Pesquisar Ansible Collections

  1. Repositório Oficial (Galaxy): Acesse o Ansible Galaxy para procurar collections. Use a barra de pesquisa com palavras-chave (ex.: "aws", "docker") ou filtre por categorias.

  2. Documentação do Ansible: Consulte a documentação oficial para detalhes sobre collections específicas, incluindo exemplos de uso e dependências.

  3. Comando ansible-galaxy: Use o comando ansible-galaxy collection list para verificar collections instaladas localmente ou ansible-galaxy collection install <nome> para baixar uma específica.

Para verificar quais informações a uma coleçao como cisco.aci do Ansible oferece, você pode explorar os módulos disponíveis, sua documentação e exemplos práticos. Aqui está um guia em pt-br sobre como fazer isso:

1. Verifique a Documentação Oficial

  • Ansible Galaxy: Acesse o Ansible Galaxy e procure pela coleção cisco.aci. Na aba "Content", você verá uma lista completa de módulos disponíveis, como aci_tenant, aci_epg, aci_rest, entre outros. Cada módulo inclui uma descrição do que ele gerencia (ex.: tenants, EPGs, contratos).

  • Documentação da Comunidade Ansible: Consulte a documentação oficial para detalhes sobre cada módulo. Por exemplo:

    • cisco.aci.aci_tenant: Gerencia tenants (fv:Tenant).
    • cisco.aci.aci_epg: Gerencia End Point Groups (fv:AEPg).
    • cisco.aci.aci_rest: Permite acesso direto à API REST do Cisco APIC.
    • Cada página de módulo lista parâmetros, retornos (informações que o módulo pode retornar) e exemplos de uso.

2. Use o Comando ansible-doc

  • No terminal, execute:
  ansible-doc -l cisco.aci

Isso lista todos os módulos da coleção cisco.aci.

  • Para detalhes sobre um módulo específico, use:
  ansible-doc cisco.aci.aci_tenant

Isso mostra a documentação do módulo, incluindo:

  • Descrição do módulo.
  • Parâmetros aceitos.
  • Valores retornados (ex.: informações sobre tenants, como nome, descrição, status).
  • Exemplos de playbooks.

Instalando Coleções de Rede

# Install Cisco IOS collection
ansible-galaxy collection install cisco.ios

# Install Juniper Junos collection
ansible-galaxy collection install junipernetworks.junos

# Install Arista EOS collection
ansible-galaxy collection install arista.eos

# Install multiple collections
ansible-galaxy collection install cisco.ios cisco.nxos junipernetworks.junos arista.eos

Configuração Básica

  • ansible.cfg: Arquivo principal de configuração para o comportamento do Ansible
  • Arquivo de inventário: Define nós gerenciados e grupos
  • Configuração de chave SSH: Para autenticação sem senha

Verificando a Instalação

# Check Ansible version
ansible --version

# List installed collections
ansible-galaxy collection list

# Verify connectivity to devices
ansible all -m ping -i inventory.yaml

Entendendo a Sintaxe YAML

Fundamentos do YAML

  • Estrutura: Hierarquia baseada em indentação (geralmente 2 espaços)
  • Pares Chave-Valor: Formato chave: valor
  • Listas: Indicadas por hífens (-)
  • Comentários: Começam com #

Exemplos de YAML

# Simple key-value pairs
hostname: router1
vendor: cisco
model: ISR4451

# Lists
interfaces:
  - name: GigabitEthernet0/0
    ip: 192.168.1.1
  - name: GigabitEthernet0/1
    ip: 192.168.2.1

# Nested structures
device:
  name: core-switch
  location: datacenter
  vlans:
    - id: 10
      name: Management
    - id: 20
      name: Users

Laboratório: Configurando o Ansible para Automação de Rede

Objetivos do Laboratório

  • Instalar o Ansible e as coleções necessárias
  • Configurar as configurações básicas do Ansible
  • Criar um arquivo de inventário simples
  • Verificar a conectividade com dispositivos de rede

Passo 1: Instalar o Ansible e Coleções de Rede

Verificar passo anterior de instalação

Passo 2: Criar o ansible.cfg

[defaults]
inventory = ./inventory
host_key_checking = False
timeout = 20
gathering = explicit
retry_files_enabled = False

[privilege_escalation]
become = False

Explicação:

  • inventory: Aponta para o arquivo de inventário.
  • timeout: Define o tempo limite de conexão como 20 segundos.
  • gathering = explicit: Desativa a coleta automática de fatos para acelerar a execução.
  • retry_files_enabled = False: Evita a criação de arquivos de retentativa em caso de falha.
  • become = False: Desativa a escalação de privilégios (geralmente desnecessária para dispositivos de rede).

Passo 3: Criar o Arquivo de Inventário

  • Para Cisco ACI, use o Cisco DevNet Sandbox.
    • Opção 1: Utilize o sandbox "Always-On" para acesso rápido.
    • Opção 2: Reserve e inicie uma instância dedicada para este laboratório.
---
all:
  children:
    network:
        children:
          cisco:
            hosts:
              r1:
                ansible_host: r1
            vars:
              ansible_network_os: cisco.ios.ios
              ansible_connection: ansible.netcommon.network_cli
              ansible_user: admin
              ansible_password: autonetops
              ansible_become: yes
              ansible_become_method: enable
    aci:
      hosts:
        aci_apic:
          ansible_host: <ENDEREÇO_IP_APIC>  # ex.: 10.10.20.14
          ansible_user: admin
          ansible_password: <SENHA>         # Substitua pela sua senha
          ansible_network_os: cisco.aci.aci
      vars:
        ansible_connection: ansible.netcommon.httpapi
        ansible_httpapi_use_ssl: True
        ansible_httpapi_validate_certs: False

Passo 4: Verificar a Conectividade

# Test connectivity to all devices
ansible network -m ping -i inventory.yaml
ansible aci -m ping -i inventory.yaml
ansible all -m ping -i inventory.yaml

# Gather facts from Cisco devices
ansible cisco -m cisco.ios.ios_facts -i inventory.yaml

Exercícios do Laboratório

  1. Adicionar dispositivos adicionais ao inventário (diferentes fornecedores, se disponível)

  2. Criar grupos com base nas funções dos dispositivos (core, distribuição, acesso)

  3. Usar o Ansible Vault para proteger credenciais

  4. Executar um comando simples em todos os dispositivos usando o módulo apropriado

Resumo

  • A automação de rede reduz erros, aumenta a eficiência e melhora a consistência

  • O Ansible oferece uma abordagem sem agente e baseada em push para automação

  • Existem diferenças importantes entre a automação de servidores e de rede com o Ansible

  • Configurar o Ansible para automação de rede requer coleções e configurações específicas

  • A sintaxe YAML é fundamental para trabalhar com playbooks e inventários do Ansible

Seu Progresso

Faça login para salvar seu progresso.

Progresso do Capítulo