M7 · Automação e SDN

Automação de Redes com Ansible, Puppet e Chef

O que é

Ferramentas de gerenciamento de configuração são soluções de software que permitem o controle centralizado de grandes quantidades de dispositivos de rede. Ansible, Puppet e Chef são as três principais ferramentas dessa categoria cobradas no exame CCNA 200-301 (tópico 6.6).

Essas ferramentas surgiram para resolver o problema que os administradores de sistemas enfrentavam ao gerenciar centenas ou milhares de máquinas virtuais. Com o tempo, passaram a ser amplamente utilizadas também no gerenciamento de dispositivos de rede — especialmente o Ansible, que se tornou o mais popular nesse contexto.

O conceito central que justifica o uso dessas ferramentas é o de Infrastructure as Code (IaC): a ideia de que a infraestrutura de rede deve ser descrita e gerenciada por meio de arquivos de código versionáveis, auditáveis e reutilizáveis, em vez de configurações manuais aplicadas dispositivo por dispositivo.


Como funciona

O problema: configuration drift

Em redes com muitos dispositivos, engenheiros frequentemente fazem alterações pontuais para resolver problemas, testar configurações ou aplicar correções de emergência. Com o tempo, essas mudanças acumulam e o dispositivo passa a ter uma configuração que diverge do padrão definido pela equipe — fenômeno chamado de configuration drift.

Sem automação, rastrear essas mudanças exige disciplina manual (salvar arquivos de config com timestamps, por exemplo), o que não escala bem em redes com centenas de dispositivos.

A solução: templates + variáveis

Todas as três ferramentas utilizam o mesmo princípio básico:

  • Template: arquivo com o modelo de configuração, onde valores específicos (hostname, IP, OSPF process ID etc.) são representados por variáveis
  • Variáveis: arquivo separado que fornece os valores específicos de cada dispositivo

Com um template único e um arquivo de variáveis por dispositivo, é possível gerar e aplicar configurações corretas para centenas de equipamentos de forma simultânea e padronizada.

Idempotência

As três ferramentas implementam o conceito de idempotência: aplicar a mesma configuração múltiplas vezes produz sempre o mesmo resultado final. Se um dispositivo já está configurado corretamente, a ferramenta não faz nenhuma alteração. Isso garante segurança nas operações automatizadas e permite executar verificações de conformidade sem risco de sobrescrever configurações corretas.


Ansible

  • Desenvolvido por: Red Hat
  • Linguagem: Python
  • Modelo: Push (o control node empurra as configurações para os dispositivos)
  • Comunicação: SSH (porta 22) — sem necessidade de agente nos dispositivos gerenciados
  • Agentless: sim — principal vantagem, pois qualquer dispositivo com SSH pode ser gerenciado

Arquivos principais:

Arquivo Função Formato
Playbook Define as tarefas e a lógica de automação YAML
Inventory Lista os dispositivos gerenciados e seus grupos INI ou YAML
Template Modelo de configuração com variáveis Jinja2
Variables Valores das variáveis por dispositivo YAML

Fluxo: Inventory + Templates + Variables → Playbook → SSH → dispositivos gerenciados

Puppet

  • Linguagem: Ruby
  • Modelo: Pull (os agentes nos dispositivos se conectam ao Puppet Master para buscar configurações)
  • Servidor: Puppet Master
  • Porta: TCP 8140 (HTTPS/REST API)
  • Agentless: não por padrão — requer o Puppet Agent instalado nos dispositivos. Pode operar sem agente via proxy externo que usa SSH

Arquivos principais:

  • Manifest: define o estado desejado de configuração de um dispositivo (linguagem proprietária baseada em Ruby)
  • Templates: auxiliam na geração dos manifests

Limitação para redes: nem todos os dispositivos Cisco suportam o Puppet Agent, o que reduz sua popularidade para gerenciamento de rede.

Chef

  • Linguagem: Ruby (DSL — Domain-Specific Language)
  • Modelo: Pull (Chef clients buscam configurações do Chef Server)
  • Servidor: Chef Server
  • Porta principal: TCP 10002
  • Agentless: não — requer Chef Agent instalado nos dispositivos

Arquivos principais:

Conceito Analogia Descrição
Resource Ingrediente Objeto de configuração gerenciado pelo Chef
Recipe Receita Lógica e ações a executar nos resources
Cookbook Livro de receitas Conjunto de recipes relacionadas
Run list Lista de preparo Ordem de execução das recipes

Fluxo: Workstation → Chef Server ← Chef Clients (pull)


Comparação das três ferramentas

Característica Ansible Puppet Chef
Linguagem Python Ruby Ruby
Agentless Sim Não (padrão) Não
Modelo Push Pull Pull
Comunicação SSH (22) TCP 8140 TCP 10002
Formato dos arquivos YAML Proprietário (Ruby-like) DSL Ruby
Servidor Control Node Puppet Master Chef Server
Popularidade em redes Alta Média Baixa

Na prática

Exemplo de playbook Ansible para configurar um roteador Cisco

---
- name: Configurar roteadores WAN
  hosts: wan_routers
  gather_facts: no

  vars:
    snmp_community: "fsudo_ro"
    syslog_server: "192.168.1.100"

  tasks:
    - name: Configurar SNMP read-only
      ios_config:
        lines:
          - "snmp-server community {{ snmp_community }} RO"

    - name: Configurar Syslog
      ios_config:
        lines:
          - "logging host {{ syslog_server }}"
          - "logging trap informational"

    - name: Salvar configuração
      ios_config:
        save_when: always

Inventory correspondente (INI):

[wan_routers]
r1 ansible_host=10.0.0.1
r2 ansible_host=10.0.0.2
r3 ansible_host=10.0.0.3

[wan_routers:vars]
ansible_network_os=ios
ansible_connection=network_cli
ansible_user=admin

Ao executar este playbook, o Ansible se conecta via SSH a cada roteador listado no inventory e aplica as configurações de SNMP e Syslog definidas. Se o roteador já tiver essas configurações corretas (idempotência), nenhuma mudança é feita.

Usos comuns dessas ferramentas

  • Provisioning de novos dispositivos: gerar e aplicar configurações completas em equipamentos recém-instalados
  • Aplicação de mudanças em massa: alterar configurações de SNMP, AAA, NTP em toda a rede de uma vez
  • Verificação de conformidade: checar se todos os dispositivos seguem os padrões definidos e alertar sobre desvios
  • Comparação de versões de configuração: comparar a config atual com uma versão anterior ou com o padrão

Por que cai no exame

O tópico 6.6 do CCNA exige que o candidato reconheça as capacidades das ferramentas de gerenciamento de configuração. As questões focam em diferenciar as três ferramentas pelos seguintes critérios:

  • Qual é agentless? → Ansible
  • Qual usa push? → Ansible
  • Quais usam pull? → Puppet e Chef
  • Qual usa YAML? → Ansible
  • Qual porta o Puppet usa? → TCP 8140
  • Qual porta o Chef usa? → TCP 10002 (principal)
  • Qual é escrito em Python? → Ansible
  • Quais são escritos em Ruby? → Puppet e Chef
  • O que são playbooks? → Blueprints de automação do Ansible, escritos em YAML
  • O que são manifests? → Arquivos do Puppet que definem o estado desejado de configuração

Questões no estilo "selecione todas que se aplicam" sobre modelos push/pull e sobre qual ferramenta usa qual linguagem são recorrentes. A tabela comparativa é o principal material de estudo.


Resumo em uma linha

Ansible (agentless, push, YAML, SSH) é o mais popular para redes; Puppet (agented, pull, TCP 8140) e Chef (agented, pull, TCP 10002) requerem agentes instalados nos dispositivos e usam linguagem baseada em Ruby.