Leálo en otros idiomas: English, 日本語, Español.
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á:
ansible-navigator :doc
para la búsqueda de documentaciónEjecuta el comando ansible-navigator
en modo interactivo en la terminal
$ ansible-navigator
pantallazo 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 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
:
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.
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: no
Expliquemos cada línea:
---
indica que es un fichero YAML.- name:
es una descipción opcional para el Playbook de Ansible en particular.hosts:
significa este playbook se ejecutará en el grupo cisco
definido en el archivo de inventario.gather_facts: no
se 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.yml
Esto abrirá una sesión interactiva mientras el playbook se ejecuta:
Pantallazo de 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:
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.
ansible-navigator :doc
nos 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.junos_facts
para Juniper Junos, y un eos_facts
para Arista EOS.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