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