Leálo en otros idiomas:
English,
日本語,
Español,
Français.
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á:
- Crear un Playbook de Ansible desde cero.
- Usar
ansible-navigator :docpara la búsqueda de documentación - Usar el módulo cisco.ios.facts.
- Usar el módulo debug.
Ejecuta el comando ansible-navigator en modo interactivo en la terminal
$ ansible-navigatorpantallazo de ansible-navigator:

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 pluginVeamos por ejemplo el módulo debug escribiendo :doc debug en la terminal:
:doc debugEste es un pantallazo de la salida del comando ansible-navigator :doc debug:
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.modulePor ejemplo:
cisco.ios.factsExplicación de términos:
- namespace - ejemplo cisco - Un espacio de nombres ('namespace') es una agrupación de colecciones múltiples. El espacio de nombres cisco contiene múltiples colecciones, incluyendo ios, nxos, e iosxr.
- collection - ejemplo ios - Una colección es es un formato de distribución para contenido de Ansible que incluye playbooks, roles, módulos, y plugins. La colección ios contiene todos los módulos del Cisco IOS/IOS-XE.
- module - ejemplo 'facts' - Los módulos son unidades discretas de código que puede usarse en una tarea de un playbook. Por ejemplo, los módulos de facts devolverán datos estructurados acerca de un determinado sistema.
Pulsa la tecla Esc para volver al menú principal. Intenta repetir el comando :doc con el módulo cisco.ios.facts.
:doc cisco.ios.factsUsaremos el módulo 'facts' en nuestro playbook.
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:

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

Inserta el siguiente play dentro del fichero facts.yml:
---
- name: gather information from routers
hosts: cisco
gather_facts: noExpliquemos cada línea:
- La primera línea,
---indica que es un fichero YAML. - La palabra clave
- name:es una descipción opcional para el Playbook de Ansible en particular. - La palabra clave
hosts:significa este playbook se ejecutará en el grupociscodefinido en el archivo de inventario. - La directiva
gather_facts: nose requiere desde Ansible 2.8 y anteriores, sólo funciona en hosts Linux, y no en una infraestructura de red. La usaremos en un módulo específico para obtener los 'facts' para un dispositivo de red.
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.
Ejecuta el Playbook de Ansible usando el comando ansible-navigator:
$ ansible-navigator run facts.ymlEsto abrirá una sesión interactiva mientras el playbook se ejecuta:
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.
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':

Puedes avanzar hacia abajo para ver cualquier 'fact' que haya sido obtenido del dispositivo de red Cisco.
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 }}"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:

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.
- El comando
ansible-navigator :docnos permitirá acceder la documentación sin una conexión de red. Esta documentación también concuerda con la versión de Ansible en el nodo de control. - El módulo cisco.ios.facts obtiene datos estructurados específicos para Cisco IOS. Existen módulos relevantes para cada plataforma de red. Por ejemplo, existe un
junos_factspara Juniper Junos, y uneos_factspara Arista EOS. - El módulo de debug permite a un Playbook de Ansible imprimir los valores en la terminal.
El Playbook de Ansible completo se provee aquí: facts.yml.
¡Felicidades, has completado el ejercicio de laboratorio 3!
Ejercicio Anterior | Próximo ejercicio
Haz click aquí para volver al taller Ansible Network Automation


