Leálo en otros idiomas: English, 日本語, Español
If you are using an all Cisco workbench (all four routers are Cisco IOS routers) please switch to these directions.
Demostración de uso de los Módulos de recursos de red de Ansible
Los módulos de recursos de red de Ansible simplifican y estandarizan cómo gestionar diferentes dispositivos de red. Los dispositivos de red separan la configuración en secciones (tales como interfaces y VLANs) que aplican a un servicio de red.
Los módulos de recursos de red proveen una experiencia consistente a través de diferentes dispositivos de red. Esto significa, que se obtendrá una experiencia idéntica en distintos provedores. Por ejemplo, el módulo VLANs trabajará identicamente para los siguientes módulos:
arista.eos.vlans
cisco.ios.vlans
cisco.nxos.vlans
cisco.iosxr.vlans
junipernetworks.junos.vlans
Configurar las VLANs en dispositivos de red es una tarea extremadamente común, y los errores de configuración pueden causar muchos dolores de cabeza y apagones. Las configuracions VLAN también tienden a ser idénticas a través de múltiples switches de red, lo que resulta en el caso de uso perfecto para la automatización.
Este ejercicio cubirá:
state: merged
state: gathered
Haz login en un switch Arista y verifica la configuración actual de la VLAN.
Desde la terminal del nodo de control, haz ssh rtr2
y escribe enable
$ ssh rtr2
Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112
rtr2>enable
Usa el comando show vlan
para examinar la configuración VLAN:
rtr2#show vlan
VLAN Name Status Ports
----- -------------------------------- --------- -------------------------------
1 default active
Usa el comando show run | s vlan
para examinar la configuración en ejecución de VLAN en el dispositivo Arista:
rtr2#show run | s vlan
rtr2#
Como se puede observar en la salida anterior, no hay configuración VLAN fuera de la VLAN 1 por defecto (que no tiene asignado ningún puerto).
Crea un nuevo fichero en Visual Studio Code llamado resource.yml
Copia el siguiente Playbook de Ansible en tu fichero resource.yml
---
- name: configure VLANs
hosts: arista
gather_facts: false
tasks:
- name: use vlans resource module
arista.eos.vlans:
state: merged
config:
- name: desktops
vlan_id: 20
- name: servers
vlan_id: 30
- name: printers
vlan_id: 40
- name: DMZ
vlan_id: 50
La configuración será similar a la siguiente en Visual Studio Code:
Primero, vamos a examinar las primeras cuatro líneas:
---
- name: configure VLANs
hosts: arista
gather_facts: false
---
designa que es un fichero YAML, que es el lenguaje en el que se escriben los playbooks.name
es el es el nombre descriptivo de lo que hace el playbook.hosts: arista
ejecutará este playbook sólo en los dispositivos de red Arista.gather_facts: false
deshabilitará la recolección de ‘facts’ en este play, por defecto está habilitado.En la segunda parte, sólo tenemos una tarea que usa arista.eos.vlans
tasks:
- name: use vlans resource module
arista.eos.vlans:
state: merged
config:
- name: desktops
vlan_id: 20
- name: servers
vlan_id: 30
- name: printers
vlan_id: 40
- name: DMZ
vlan_id: 50
name:
Al igual que en el playbook, es el nombre descriptivo que cada tarea tiene.state: merged
Es el comportamiento por defecto de los módulos de recursos. Simplemente reforzará que exista la configuración propuesta en el dispositivo de red. Hay siete valores posibles para este parámetro del módulo de recursos:
Sólo dos de estos valores se cubrirán en este ejercicio, pero se pueden ver más en los ejercicios complementarios.
config:
configuración VLAN propuesta. Es una lista de diccionarios. Lo más importante a recordar es que si el módulo ha cambiado de arista.eos.vlans
a junipernetworks.junos.vlans
funcionará de manera idéntica. Esto permitirá a los ingenieros de red enfocarse en la red en sí (ej. configuración VLAN) en vez de en la sintáxis del fabricante y su implementación.Ejecuta el playbook usando el comando ansible-navigator run
. Puesto que sólo contiene una tarea, podemos usar el parámetro --mode stdout
.
$ ansible-navigator run resource.yml --mode stdout
La salida debe ser similar a:
$ ansible-navigator run resource.yml --mode stdout
PLAY [configure VLANs] *********************************************************
TASK [use vlans resource module] ***********************************************
changed: [rtr4]
changed: [rtr2]
PLAY RECAP *********************************************************************
rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rtr4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Vuelve a ejecutar el playbook para demostrar el concepto de idempotencia
$ ansible-navigator run resource.yml --mode stdout
PLAY [configure VLANs] *********************************************************
TASK [use vlans resource module] ***********************************************
ok: [rtr2]
ok: [rtr4]
PLAY RECAP *********************************************************************
rtr2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rtr4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Como se puede observar en la salida anterior, todo devolverá ok=1
indicando que no se han llevado a cabo cambios.
Haz login en un switch Arista y verifica la configuración VLAN actual.
En la terminal del nodo de control, ejecuta ssh rtr2
y posteriormente, teclea enable
.
$ ssh rtr2
Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112
rtr2>enable
Usa el comando show vlan
para examinar la configuración VLAN:
rtr2#show vlan
VLAN Name Status Ports
----- -------------------------------- --------- -------------------------------
1 default active
20 desktops active
30 servers active
40 printers active
50 DMZ active
Usa el comando show run | s vlan
para examinar la configuración en ejecución VLAN del dispositivo Arista:
rtr2#sh run | s vlan
vlan 20
name desktops
!
vlan 30
name servers
!
vlan 40
name printers
!
vlan 50
name DMZ
Como puede observarse, el módulo de recursos está configurado en el dispositivo de red Arista EOS con la configuración propuesta. Ahora hay cinco VLANs en total (incluyendo la VLAN 1 por defecto).
gathered.yml
---
- name: configure VLANs
hosts: arista
gather_facts: false
tasks:
- name: use vlans resource module
arista.eos.vlans:
state: gathered
register: vlan_config
- name: copy vlan_config to file
copy:
content: "{{ vlan_config | to_nice_yaml }}"
dest: "{{ playbook_dir }}/{{ inventory_hostname }}_vlan.yml"
La primera tarea es idéntica, sólo que state: merged
se ha cambiado por gathered
, la directiva config
ya no es necesaria puesto que estamos leyendo la configuración (en vez de aplicandola a un dispositivo de red), y usamos register
para guardar la salida del módulo en una variable llamada vlan_config
.
En la seguna tarea, se copia el contenido de la variable vlan_config
a un fichero de texto plano. Las doble llaves denotan que se trata de una variable.
El | to_nice_yaml
es un filtro, que convertirá la salida JSON (por defecto) a YAML.
El playbook_dir
y inventory_hostname
son variables especiales, también llamadas variables mágicas. El playbook_dir
simplemente signifca el directorio desde donde se ha ejecutado el playbook, y el inventory_hostname
es el nombre del dispositivo en nuestro inventario. Esto significa que se guardará como ~/network-workshop/rtr2_vlan.yml
y ~/network-workshop/rtr4_vlan.yml
para los dos dispositivos arista.
Ejecuta el playbook usando el comando ansible-navigator run
.
$ ansible-navigator run gathered.yml --mode stdout
La salida debe ser similar a ésta:
$ ansible-navigator run gathered.yml --mode stdout
PLAY [configure VLANs] *********************************************************
TASK [use vlans resource module] ***********************************************
ok: [rtr4]
ok: [rtr2]
TASK [copy vlan_config to file] ************************************************
changed: [rtr2]
changed: [rtr4]
PLAY RECAP *********************************************************************
rtr2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
rtr4 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Abre los nuevos ficheros que la directiva gathered
ha generado de la configuración VLAN de los dispositivos de red Arista.
Los dos ficheros se han guardado como ~/network-workshop/rtr2_vlan.yml
y ~/network-workshop/rtr4_vlan.yml
para los dos dispositivos arista.
Aquí se puede ver un pantallazo:
El playbook de Ansible completo se puede obtener aquí:
¡Felicidades, has completado el ejercicio de laboratorio 4!
Tal y como se explicó anteriormente, sólo dos de los parámetros de los módulos de recursos han sido cubiertos en este ejercicio, pero hay ejercicios adicionales en ejercicios adicionales.
En el siguiente ejercicio empezaremos a utilizar el controlador de automatización (Automation controller).
Ejercicio Anterior | Próximo ejercicio
Haz click aquí para volver al taller Ansible Network Automation