Leálo en otros idiomas: English,
日本語,
Español,
Français.
If you are using an all Cisco workbench (all four routers are Cisco IOS routers) please switch to these directions.
- Objetivo
- Guía
- Paso 1 - Verificar la configuración VLAN
- Paso 2 - Crear el Playbook de Ansible
- Paso 3 - Examinar Playbook de Ansible
- Paso 4 - Ejecutar el Playbook de Ansible
- Paso 5 - Verificar la configuración VLAN
- Paso 6 - Usando los parámetros obtenidos
- Paso 7 - Ejecutar el playbook obtenido
- Paso 8 - Examinar los ficheros
- Consejos a recordar
- Solución
- Completado
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á:
- Configurar las VLANs en Arista EOS
- Crear un Playbook de Ansible usando el módulo arista.eos.vlans.
- Comprender el estado
state: merged
- Comprender el estado
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 escribeenable
$ 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:- merged
- replaced
- overridden
- deleted
- rendered
- gathered
- parsed
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 dearista.eos.vlans
ajunipernetworks.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, tecleaenable
.$ 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).
- Creat un nuevo playbook llamdo
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 porgathered
, la directivaconfig
ya no es necesaria puesto que estamos leyendo la configuración (en vez de aplicandola a un dispositivo de red), y usamosregister
para guardar la salida del módulo en una variable llamadavlan_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
yinventory_hostname
son variables especiales, también llamadas variables mágicas. Elplaybook_dir
simplemente signifca el directorio desde donde se ha ejecutado el playbook, y elinventory_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:
- Los módulos de recursos tienen una estructura de datos simple que puede transformarse a la sintáxis de los dispositivos de red. En este caso, el diccionario VLAN se transforma en sintáxis de dispositivo de red Arista EOS.
- Los módulos de recursos son idempotentes, y se pueden configuar para comprobar el estado de un dispositivo de red.
- Los módulos de recursos son bi-direccionales, es decir, que pueden obtener 'facts' para un recurso específico al igual que aplicar configuración. Incluso si no se usan módulos de recursos para configurar dispositivos de red, proveen de enorme valor a la hora de comprobar estados de los recursos.
- El comportamiento bi-direccional también nos permite que redes ya existentes puedan cambiar rápidamente su configuración en ejecución a datos estructurados. Esto permite a los ingenieros de red que la automatización esté funcionando mucho más rápido.
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