Leálo en otros idiomas: English, 日本語, Español.
Usaremos Ansible para actualizar la configuración de los enrutadores. Este ejercicio no creará un Playbook de Ansible, sino que utilizará uno existente que ya ha sido provisto.
Este ejercicio cubrirá:
ansible-navigator
--check
)--verbose
o -v
)Navega hasta el directorio network-workshop
si es que no estás ya allí.
[student@ansible ~]$ cd ~/network-workshop/
[student@ansible network-workshop]$
[student@ansible network-workshop]$ pwd
/home/student/network-workshop
Examina el Playbook de Ansible existente llamado playbook.yml
. Tanto con Visual Studio Code o con el comando cat
sobre el fichero:
---
- name: snmp ro/rw string configuration
hosts: cisco
gather_facts: no
tasks:
- name: ensure that the desired snmp strings are present
cisco.ios.config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
cat
- Comando de Linux que permite ver el contenido de un ficheroplaybook.yml
- Playbook de Ansible provistoExploraremos en detalle los componentes de un Playbook de Ansible en el siguiente ejercicio. Por ahora, es suficiente con observar que este playbook ejecutará dos comandos Cisco IOS-XE.
snmp-server community ansible-public RO
snmp-server community ansible-private RW
Ejecuta el playbook usando el comando ansible-navigator
. El comando completo es:
ansible-navigator run playbook.yml --mode stdout
[student@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout
PLAY [snmp ro/rw string configuration] *****************************************
TASK [ensure that the desired snmp strings are present] ************************
changed: [rtr1]
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
[student@ansible-1 network-workshop]$
--mode stdout
- Por defecto, ansible-navigator
se ejecutará en modo interactivo. El comportamiento por defecto puede modificarse cambiando el fichero the ansible-navigator.yml
. A medida que los playbooks crecen e incluyen a múltiples máquinas, el modo interactivo permite “hacer zoom” sobre los datos en tiempo real, filtrarlos y navergar entre varios componentes de Ansible. Puesto que esta tarea sólo se ejecutó en una máquina la salida stdout
es suficiente.Verify that the Ansible Playbook worked. Login to rtr1
and check the running configuration on the Cisco IOS-XE device.
[student@ansible network-workshop]$ ssh rtr1
rtr1#show run | i snmp
snmp-server community ansible-public RO
snmp-server community ansible-private RW
El módulo cisco.ios.config
es idempotente. Esto significa, que un cambio de configuración se envía al dispositivo sí y sólo sí, la configuación no existe ya en las máquinas de destino.
¿Necesitas ayuda con la terminología de Automatización Ansible?
Échale un vistazo al glosario aquí para más información sobre términos como idempotencia.
Para verificar el concepto de idempotencia, vuelve a ejecutar el playbook:
[student@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout
PLAY [snmp ro/rw string configuration] *****************************************
TASK [ensure that the desired snmp strings are present] ************************
ok: [rtr1]
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Nota:
Observa el parámetro changed en la salida PLAY RECAP indica 0 cambios efectuados.
Al volver a ejecutar un Playbook de Ansible en múltiples ocasiones, la salida será siempre la misma, con los parámetros ok=1 y change=0. A menos que otro operador o proceso elimine o modifique la configuración existente en rtr1, este Playbook de Ansible siempre devolverá ok=1 indicando así, que la configuración ya existía y está correctamente configurada en el dispositivo de red.
Ahora vamos a actualizar la tarea para añadir una cadena de comunidad SNMP RO llamada ansible-test
.
snmp-server community ansible-test RO
Usa Visual Studio Code para abrir el ficheo playbook.yml
y añadir el comando anterior.
El Playbook de Ansible quedará así:
---
- name: snmp ro/rw string configuration
hosts: cisco
gather_facts: no
tasks:
- name: ensure that the desired snmp strings are present
cisco.ios.config:
commands:
- snmp-server community ansible-public RO
- snmp-server community ansible-private RW
- snmp-server community ansible-test RO
Asegúrate de guardar el fichero playbook.yml
con los cambios.
Esta vez, sin embargo, en vez de ejecutar el playbook para enviar un cambio al dispositivo, se ejecutará usando el parámetro --check
junto con -v
para tener una salida más verbosa:
[student@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout --check -v
Using /etc/ansible/ansible.cfg as config file
PLAY [snmp ro/rw string configuration] *****************************************
TASK [ensure that the desired snmp strings are present] ************************
changed: [rtr1] => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "banners": {}, "changed": true, "commands": ["snmp-server community ansible-test RO"], "updates": ["snmp-server community ansible-test RO"], "warnings": ["To ensure idempotency and correct diff the input configuration lines should be similar to how they appear if present in the running configuration on device"]}
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
El modo --check
en combinación con --verbose
mostrará los cambios exactos que serán desplegados en el dispositivo final sin en realidad, enviarlos. Ésta es una forma estupenda de validar los cambios a realizar antes de enviarlos al dispositivo.
Verifiquemos quel el Playbook de Ansible no ha aplicado la comunidad ansible-test
. Entra en rtr1
y verifica la configuración en ejecución del dispositivo Cisco IOS-XE.
[student@ansible network-workshop]$ ssh rtr1
rtr1#show run | i snmp
snmp-server community ansible-public RO
snmp-server community ansible-private RW
Finalmente, re-ejecutaremos el playbook otra vez sin los parámetros -v
o --check
para enviar los cambios al dispositivo.
[student@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout
PLAY [snmp ro/rw string configuration] *****************************************
TASK [ensure that the desired snmp strings are present] ************************
changed: [rtr1]
PLAY RECAP *********************************************************************
rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Verifiquemos que el Playbook de Ansible aplicó la comunidad ansible-test. Entra en rtr1
y verifica la configuración en ejecución del dispositivo Cisco IOS-XE.
[student@ansible network-workshop]$ ssh rtr1
rtr1#sh run | i snmp
snmp-server community ansible-public RO
snmp-server community ansible-private RW
snmp-server community ansible-test RO
El Playbook de Ansible completo se puede encontrar en: playbook.yml.
¡Felicidades, has completado el ejercicio de laboratorio 2!
Ejercicio Anterior | Próximo ejercicio
Haz click aquí para volver al taller Ansible Network Automation