Ejercicio 2 - Primer Playbook de Ansible

Leálo en otros idiomas: uk English, japan 日本語, Español Español.

Índice

Objetivo

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á:

Guía

Paso 1 - Examinar un Playbook de Ansible

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

Exploraremos 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

Paso 2 - Ejecutar un Playbook de Ansible

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]$

Paso 3 - Verificar la configuración de un enrutador

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

Paso 4 - Validar la idempotencia

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.

Paso 5 - Modificar un Playbook de Ansible

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.

Paso 6 - Usar el modo de validación

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.

Paso 7 - Verificar que la configuración no está presente

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

Paso 8 - Re-ejecutar the Ansible Playbook

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

Paso 9 - Re-ejecutar un Playbook de Ansible

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

Consejos a recordar

Solución

El Playbook de Ansible completo se puede encontrar en: playbook.yml.

Completado

¡Felicidades, has completado el ejercicio de laboratorio 2!


Ejercicio Anterior | Próximo ejercicio

Haz click aquí para volver al taller Ansible Network Automation