Ansible Cheat Sheet

Comandos Principais do Ansible

# Verificar versão do Ansible
ansible --version

# Executar comando ad-hoc
ansible [hosts] -m [módulo] -a "[opções do módulo]"

# Executar playbook
ansible-playbook playbook.yml

# Executar playbook com inventário específico
ansible-playbook -i inventory.yml playbook.yml

# Verificar sintaxe do playbook
ansible-playbook --syntax-check playbook.yml

# Executar playbook em modo de verificação (teste seco)
ansible-playbook --check playbook.yml

# Executar playbook com saída detalhada
ansible-playbook -v playbook.yml  # -vv ou -vvv para mais detalhes

# Executar playbook com variáveis extras
ansible-playbook playbook.yml -e "variável=valor"

# Executar playbook com senha do vault
ansible-playbook playbook.yml --ask-vault-pass

# Listar hosts que seriam afetados
ansible-playbook playbook.yml --list-hosts

# Executar playbook com tags específicas
ansible-playbook playbook.yml --tags "tag1,tag2"

# Pular tags específicas
ansible-playbook playbook.yml --skip-tags "tag1,tag2"

Exemplos de Inventário

Formato INI

[routers]
router1 ansible_host=192.168.1.1
router2 ansible_host=192.168.1.2

[switches]
switch1 ansible_host=192.168.2.1
switch2 ansible_host=192.168.2.2

[cisco:children]
routers
switches

[cisco:vars]
ansible_network_os=cisco.ios.ios
ansible_connection=ansible.netcommon.network_cli
ansible_user=admin
ansible_password=cisco123
ansible_become=sim
ansible_become_method=enable

Formato YAML

all:
  children:
    routers:
      hosts:
        router1:
          ansible_host: 192.168.1.1
        router2:
          ansible_host: 192.168.1.2
    switches:
      hosts:
        switch1:
          ansible_host: 192.168.2.1
        switch2:
          ansible_host: 192.168.2.2
    cisco:
      children:
        routers:
        switches:
      vars:
        ansible_network_os: cisco.ios.ios
        ansible_connection: ansible.netcommon.network_cli
        ansible_user: admin
        ansible_password: cisco123
        ansible_become: sim
        ansible_become_method: enable

Variáveis Comuns de Rede

# Variáveis de conexão
ansible_host: 192.168.1.1
ansible_network_os: cisco.ios.ios
ansible_connection: ansible.netcommon.network_cli
ansible_user: admin
ansible_password: senha
ansible_become: sim
ansible_become_method: enable
ansible_become_password: senha_enable

# Variáveis de conexão API
ansible_httpapi_use_ssl: sim
ansible_httpapi_validate_certs: não
ansible_httpapi_port: 443

# Variáveis de conexão NETCONF
ansible_netconf_port: 830
ansible_netconf_hostkey_verify: não

Coleções de Plataforma de Rede

Fornecedor Coleção Valor de Network OS
Cisco IOS/IOS-XE cisco.ios cisco.ios.ios
Cisco NX-OS cisco.nxos cisco.nxos.nxos
Cisco IOS-XR cisco.iosxr cisco.iosxr.iosxr
Juniper JUNOS junipernetworks.junos junipernetworks.junos.junos
Arista EOS arista.eos arista.eos.eos
VyOS vyos.vyos vyos.vyos.vyos

Módulos de Rede Comuns

Módulos de Configuração

# Configuração Cisco IOS
- cisco.ios.ios_config:
    lines:
      - hostname ROUTER1
      - ip domain-name example.com
    save_when: modified

# Configuração Juniper
- junipernetworks.junos.junos_config:
    lines:
      - set system host-name ROUTER1
      - set system domain-name example.com
    comment: "Configurado por Ansible"

# Configuração Arista EOS
- arista.eos.eos_config:
    lines:
      - hostname SWITCH1
      - ip domain-name example.com
    save_when: modified

Módulos de Recursos

# Configurar interfaces
- cisco.ios.ios_interfaces:
    config:
      - name: GigabitEthernet0/0
        description: Gerenciamento
        enabled: true
    state: merged

# Configurar VLANs
- cisco.ios.ios_vlans:
    config:
      - vlan_id: 10
        name: Gerenciamento
      - vlan_id: 20
        name: Usuários
    state: merged

# Configurar interfaces L3
- cisco.ios.ios_l3_interfaces:
    config:
      - name: GigabitEthernet0/0
        ipv4:
          - address: 192.168.1.1/24
    state: merged

Módulos de Comando

# Executar comandos no Cisco IOS
- cisco.ios.ios_command:
    commands:
      - show version
      - show ip interface brief
  register: output

# Executar comandos no Juniper
- junipernetworks.junos.junos_command:
    commands:
      - show version
      - show interfaces terse
  register: output

# Executar comandos com wait_for
- cisco.ios.ios_command:
    commands:
      - show ip ospf neighbor
    wait_for:
      - result[0] contains FULL/BDR
  retries: 10
  delay: 5

Estados dos Módulos de Recursos

Estado Descrição
merged Combina a configuração com a configuração existente do dispositivo
replaced Substitui a configuração do dispositivo do recurso especificado
overridden Substitui toda a configuração do dispositivo do recurso especificado
deleted Exclui a configuração do recurso especificado
gathered Recupera a configuração atual do dispositivo
rendered Gera configuração específica do dispositivo para análise offline
parsed Converte a configuração fornecida em dados estruturados

Comandos do Ansible Vault

# Criar novo arquivo criptografado
ansible-vault create secret.yml

# Editar arquivo criptografado
ansible-vault edit secret.yml

# Criptografar arquivo existente
ansible-vault encrypt secret.yml

# Descriptografar arquivo
ansible-vault decrypt secret.yml

# Visualizar arquivo criptografado
ansible-vault view secret.yml

# Alterar senha do vault
ansible-vault rekey secret.yml

# Executar playbook com senha do vault
ansible-playbook playbook.yml --ask-vault-pass

# Executar playbook com arquivo de senha do vault
ansible-playbook playbook.yml --vault-password-file=vault_pass.txt

Exemplos de Templates Jinja2

Sintaxe Básica

# Variáveis
{{ nome_variavel }}

# Condicionais
{% if condicao %}
  # código
{% elif outra_condicao %}
  # código
{% else %}
  # código
{% endif %}

# Loops
{% for item in itens %}
  # código com {{ item }}
{% endfor %}

# Comentários
{# Este é um comentário #}

Template de Configuração de Rede

hostname {{ hostname }}
!
{% for server in ntp_servers %}
ntp server {{ server }}
{% endfor %}
!
{% for server in dns_servers %}
ip name-server {{ server }}
{% endfor %}
!
{% for interface in interfaces %}
interface {{ interface.name }}
 description {{ interface.description }}
 {% if interface.ip is defined %}
 ip address {{ interface.ip }} {{ interface.mask }}
 {% endif %}
 {% if interface.enabled %}
 no shutdown
 {% else %}
 shutdown
 {% endif %}
!
{% endfor %}

Melhores Práticas para Estrutura de Playbooks

---
# Playbook: configure_network.yml
# Propósito: Configurar configurações básicas de rede
# Autor: Equipe de Rede
# Data: Abril de 2025

- name: Configurar Dispositivos de Rede
  hosts: network
  gather_facts: no

  vars:
    # Variáveis definidas aqui

  vars_files:
    - vars/common.yml
    - vars/secrets.yml

  pre_tasks:
    - name: Fazer backup da configuração
      # Tarefa de backup aqui

  tasks:
    - name: Configurar hostname
      # Implementação da tarefa
      tags:
        - hostname
        - base

    - name: Configurar interfaces
      # Implementação da tarefa
      tags:
        - interfaces
      notify:
        - salvar configuração

  handlers:
    - name: salvar configuração
      # Implementação do manipulador

  post_tasks:
    - name: Verificar configuração
      # Tarefa de verificação aqui

Exemplos de Tratamento de Erros

# Usando blocos e resgate
- block:
    - name: Configurar funcionalidade
      # Implementação da tarefa
  rescue:
    - name: Tratar falha
      # Tarefa de recuperação
  always:
    - name: Sempre executar
      # Tarefa sempre executada

# Usando failed_when
- name: Verificar saída do comando
  cisco.ios.ios_command:
    commands: show ip ospf neighbor
  register: result
  failed_when: "'FULL' not in result.stdout[0]"

# Usando changed_when
- name: Executar comando show
  cisco.ios.ios_command:
    commands: show version
  register: output
  changed_when: false

# Usando ignore_errors
- name: Tentar funcionalidade opcional
  cisco.ios.ios_config:
    lines:
      - feature optional
  ignore_errors: sim

Melhores Práticas para Estrutura de Diretórios

ansible-network/
├── ansible.cfg
├── inventory/
│   ├── hosts.yml
│   ├── group_vars/
│   │   ├── all.yml
│   │   ├── cisco.yml
│   │   └── juniper.yml
│   └── host_vars/
│       ├── router1.yml
│       └── switch1.yml
├── playbooks/
│   ├── site.yml
│   ├── backup.yml
│   └── configure.yml
├── roles/
│   ├── common/
│   ├── interfaces/
│   └── routing/
├── templates/
│   ├── base.j2
│   └── interfaces.j2
├── files/
│   └── banner.txt
└── backup/
    └── configs/

Comandos Comuns de Solução de Problemas

# Verificar conectividade com dispositivos
ansible network -m ping

# Coletar fatos para verificar conexão
ansible cisco -m cisco.ios.ios_facts

# Aumentar verbosidade para depuração
ansible-playbook -vvv playbook.yml

# Verificar sintaxe
ansible-playbook --syntax-check playbook.yml

# Executar em modo de verificação
ansible-playbook --check playbook.yml

# Listar hosts que seriam afetados
ansible-playbook --list-hosts playbook.yml

# Executar tarefas do playbook passo a passo
ansible-playbook --step playbook.yml
Seu Progresso

Faça login para salvar seu progresso.

Progresso do Capítulo