Herramientas de Gestión de Configuración
Las herramientas de gestión de configuración permiten definir el estado deseado de la red en archivos de texto versionados (Git) y aplicarlos automáticamente a múltiples dispositivos.
Ansible
Section titled “Ansible”La herramienta más popular para automatización de red. No necesita agente (en comparación con Puppet/Chef) y usa SSH para conectarse a los dispositivos.
Conceptos clave
Section titled “Conceptos clave”| Concepto | Descripción |
|---|---|
| Playbook | Archivo YAML que define las tareas a ejecutar |
| Inventory | Lista de dispositivos y sus datos |
| Module | Función que ejecuta una acción específica |
| Role | Colección reutilizable de playbooks |
| Template | Plantilla Jinja2 con variables |
Playbook de ejemplo
Section titled “Playbook de ejemplo”---- name: Configurar VLANs en switches hosts: switches gather_facts: yes tasks: - name: Crear VLAN 10 - Datos ios_vlans: config: - vlan_id: 10 name: Datos state: active state: merged
- name: Crear VLAN 20 - Voz ios_vlans: config: - vlan_id: 20 name: Voz state: active state: merged
- name: Configurar puertos de acceso ios_interfaces: config: - name: FastEthernet0/1 switchport: mode: access access_vlan: 10 state: mergedInventory de ejemplo
Section titled “Inventory de ejemplo”all: children: switches: hosts: SW1: ansible_host: 192.168.99.10 ansible_user: admin ansible_password: "{{ vault_sw1_pass }}" ansible_network_os: ios SW2: ansible_host: 192.168.99.11 ansible_user: admin ansible_password: "{{ vault_sw2_pass }}" ansible_network_os: ios routers: hosts: R1: ansible_host: 192.168.99.1 ansible_user: admin ansible_password: "{{ vault_r1_pass }}" ansible_network_os: iosEjecución
Section titled “Ejecución”# Ejecutar playbookansible-playbook -i inventory.yml playbook-vlans.yml
# Dry run (sin aplicar cambios)ansible-playbook -i inventory.yml playbook-vlans.yml --check
# Ver diff de cambiosansible-playbook -i inventory.yml playbook-vlans.yml --diff
# Limitar a un hostansible-playbook -i inventory.yml playbook-vlans.yml --limit SW1Módulos de red Ansible
Section titled “Módulos de red Ansible”| Módulo | Función |
|---|---|
ios_config |
Enviar configuración IOS |
ios_vlans |
Gestionar VLANs |
ios_interfaces |
Configurar interfaces |
ios_l3_interfaces |
Configurar IPs en interfaces |
ios_static_routes |
Agregar rutas estáticas |
ios_acls |
Gestionar ACLs |
ios_ping |
Hacer ping desde el dispositivo |
Terraform
Section titled “Terraform”Herramienta de Hashicorp para gestionar infraestructura como código. Se enfoca en el ciclo de vida de recursos (crear, modificar, destruir).
Terraform para red
Section titled “Terraform para red”terraform { required_providers { ciscoise = { source = "CiscoDevNet/ciscoise" version = "~> 0.1" } }}
provider "ciscoise" { username = "admin" password = "password" url = "https://dna-center.local"}
resource "cisco_network_device" "switch" { hostname = "SW1" ip_address = "192.168.99.10" platform = "C9200" management_ip = "192.168.99.10"}Comandos Terraform
Section titled “Comandos Terraform”terraform init # Inicializar providerterraform plan # Ver cambios sin aplicarterraform apply # Aplicar cambiosterraform destroy # Destruir recursosPuppet y Chef
Section titled “Puppet y Chef”Herramientas basadas en agente: necesitan un agente instalado en cada dispositivo.
| Característica | Ansible | Puppet | Chef |
|---|---|---|---|
| Agente | No (agentless) | Sí | Sí |
| Transporte | SSH | HTTPS | HTTPS |
| Lenguaje | YAML | DSL propio (Puppet) | Ruby (DSL) |
| Servidor | No necesario | Puppet Master | Chef Server |
| Complejidad | Baja | Media | Alta |
| Uso en redes | Muy común | Común | Común |
Git como sistema de versionado
Section titled “Git como sistema de versionado”Toda configuración de red debería estar en Git:
# Estructura del repositorionetwork-configs/├── inventory.yml├── playbooks/│ ├── vlans.yml│ ├── qos.yml│ └── backup.yml├── group_vars/│ ├── switches.yml│ └── routers.yml├── templates/│ └── config-backup.j2└── backups/ ├── R1-running.cfg └── SW1-running.cfggit initgit add .git commit -m "Initial commit: playbooks de VLANs y QoS"git push origin mainDetección de config drift
Section titled “Detección de config drift”Comparar la configuración actual con la almacenada en Git:
# Backup actualssh admin@192.168.99.1 "show running-config" > backups/R1-actual.cfg
# Comparar con Gitdiff backups/R1-actual.cfg backups/R1-git.cfg
# O usar Ansible para automatizaransible-playbook check-drift.ymlDecidir qué herramienta usar
Section titled “Decidir qué herramienta usar”| Necesidad | Herramienta recomendada |
|---|---|
| Configuración simple de switches | Ansible |
| Gestión de infraestructura cloud | Terraform |
| Gestión compleja con agente | Puppet |
| Configuración Ruby-friendly | Chef |
| Monitoreo en tiempo real | gNMI + script Python |