Ejercicio 3: Ansible Facts

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

Índice

Objetivo

Demostración del uso de los hechos de Ansible (en adelante, Ansible facts) en una infraestructura de red.

Los hechos de Ansible (facts) son información derivada de la comunicación con elementos de red remotos. Los ‘facts’ son devueltos en forma de datos estructurados (JSON) lo que hace que sean fácilmente manipulables o modificables. Por ejemplo, un ingeniero de red podría crear un reporte de auditoría muy rápidamente usando los ‘facts’ de Ansible y creando una plantilla en un fichero markdown o HTML.

Este ejercicio cubrirá:

Guía

Paso 1 - Usando la documentación

Ejecuta el comando ansible-navigator en modo interactivo en la terminal

$ ansible-navigator

pantallazo de ansible-navigator: ansible-navigator interactive mode

En el pantallazo anterior se puede ver una línea por cada documentación de módulo o plugin:

`:doc <plugin>`                 Review documentation for a module or plugin

Veamos por ejemplo el módulo debug escribiendo :doc debug en la terminal:

:doc debug

Este es un pantallazo de la salida del comando ansible-navigator :doc debug:

ansible-navigator interactive mode doc

La documentación para el módulo de debug se muestra en la sesión de terminal interactiva. Es una representación en YAML de la misma documentación que está disponible en docs.ansible.com. Los ejemplos pueden ser copiados y pegados directamente del módulo de documentación en un Playbook de Ansible.

Cuando nos referimos a un módulo no embebido, hay tres campos importantes:

namespace.collection.module

Por ejemplo:

cisco.ios.facts

Explicación de términos:

Pulsa la tecla Esc para volver al menú principal. Intenta repetir el comando :doc con el módulo cisco.ios.facts.

:doc cisco.ios.facts

Usaremos el módulo ‘facts’ en nuestro playbook.

Paso 2 - Creando el play

Los ficheros de Playbook de Ansible están en escritos en YAML. YAML es un formato de codificación estructurado que, además, es extremadamente leíble por los humanos (al contrario que su subconjunto - el formato JSON)

Crea un nuevo fichero en Visual Studio Code: vscode new file

Para simplificar, llama al fichero de playbook: facts.yml: vscode save file

Inserta el siguiente play dentro del fichero facts.yml:

---
- name: gather information from routers
  hosts: cisco
  gather_facts: no

Expliquemos cada línea:

Paso 3 - Crear la tarea de facts

Ahora, añade la primera tarea usando la directiva task. Esta tarea usará el módulo cisco.ios.facts para obtener los hechos (‘facts’) sobre cada dispositivo del grupo cisco.

---
- name: gather information from routers
  hosts: cisco
  gather_facts: no

  tasks:
    - name: gather router facts
      cisco.ios.facts:

Nota:

Un ‘play’ es una lista de tareas. Los módulos son código ya escrito que lleva a cabo una tarea.

Guarda el playbook.

Paso 4 - Ejecutando el playbook

Ejecuta el Playbook de Ansible usando el comando ansible-navigator:

$ ansible-navigator run facts.yml

Esto abrirá una sesión interactiva mientras el playbook se ejecuta:

Pantallazo de facts.yml: ansible-navigator run facts.yml

Para ampliar la salida del playbook, pulsaremos 0 que nos mostrará una vista centrada en el host. Puesto que sólo hay un host, sólo hay una opción.

Pantallazo de la ampliación: ansible-navigator zoom hosts

Para ver la salida verbosa de rtr1 pulsa 0 otra vez para ampliar los valores de retorno del módulo.

Pantallazo de la ampliación dentro del módulo ‘data’: ansible-navigator zoom module

Puedes avanzar hacia abajo para ver cualquier ‘fact’ que haya sido obtenido del dispositivo de red Cisco.

Paso 5 - Usando el módulo de debug

Escribe dos tareas adicionales que mostrarán la versión del SO y el número de serie del enrutador.

---
- name: gather information from routers
  hosts: cisco
  gather_facts: no

  tasks:
    - name: gather router facts
      cisco.ios.facts:

    - name: display version
      debug:
        msg: "The IOS version is: {{ ansible_net_version }}"

    - name: display serial number
      debug:
        msg: "The serial number is:{{ ansible_net_serialnum }}"

Paso 6 - Usando la salida estándar stdout

Ahora, vuelve a ejecutar el playbook usando el comando ansible-navigator y el modificador --mode stdout

El comando completo es: ansible-navigator run facts.yml --mode stdout

Pantallazo de ansible-navigator usando la salida estándar: ansible-navigator stdout screenshot

Usando menos de 20 líneas de “código” has sido capaz de automatizar la obtención de la versión y el número de serie. ¡Imagina si estuvieras ejecutando esto en tu entorno de producción de red! Ahora tienes datos sobre los que poder ejecutar acciones y que no se quedan desactualizados.

Consejos a recordar

Solución

El Playbook de Ansible completo se provee aquí: facts.yml.

Completado

¡Felicidades, has completado el ejercicio de laboratorio 3!


Ejercicio Anterior | Próximo ejercicio

Haz click aquí para volver al taller Ansible Network Automation