Programar tarea de copia de seguridad de la configuración de los switches de forma automática con Ansible. Explicamos el proceso mediante conexión directa por SSH, por lo que servirá para cualquier fabricante que admita acceso SSH como Cisco, TP-Link, Huawei, HP / Aruba, Juniper y Fortiswitch. En este caso preparamos la automatización para switches Cisco y mostramos también playbooks para otros fabricantes (HP, Huawei, Juniper, Fortiswitch).

Preparar switches para automatizar copia de seguridad de configuración

La única preparación que requiere cada switch para programar esta tarea de copia de seguridad es que dispongan de acceso SSH y un usuario y contraseña con este acceso y permisos para obtener la configuración. Podremos crear un usuario y contraseña por cada switch diferente (es lo recomendable por seguridad) o bien un mismo usuario y contraseña común para todos los switches. Ansible permite ambas opciones.

En el siguiente tutorial explicamos cómo configurar acceso SSH en switch Cisco:

El servidor de Ansible debe tener visibilidad de red con los switches, si están en redes separadas con cortafuegos, se deberá abrir el puerto SSH desde el servidor Ansible.

Servidor Ansible para automatización de copias de seguridad de switches

Necesitaremos disponer de un servidor Ansible Semaphore que será el que realice la tarea de conexión con cada switch, ejecución de obtención de configuración y transferencia y guardado en fichero. En el siguiente tutorial explicamos cómo desplegar un servidor Ansible:

Crearemos un inventario en Ansible Semaphore con los switches de los que queramos hacer copia de seguridad. Para ello, desde Semaphore, pulsaremos en «Inventario» – «Nuevo inventario» – «Ansible Inventory»:

Introduciremos los siguientes datos para el inventario de switches:

  • Nombre: switches_cisco.
  • Credenciales de Usuario: para este caso, no las necesitaremos, porque las credenciales las estableceremos en el YAML del inventario. Pero como este campo es obligatorio, elegiremos cualquier credencial que tengamos en Semaphore.
  • Tipo: elegiremos «Static YAML»:

Introduciremos el siguiente contenido en formato YAML. En este ejemplo mostramos cómo asignar un usuario y contraseña diferentes por cada switch inventariado. El nombre del switch se usará para crear una carpeta en el servidor Ansible por cada switch, guardando un histórico de copias de seguridad por cada uno:

Prepararemos la carpeta del servidor Ansible donde se guardará una subcarpeta por cada switch y sus ficheros de copia de seguridad de la configuración. Nos conectaremos al servidor Ansible por SSH y crearemos la carpeta /backups_switches, asignándole los permisos apropiados:

Para «mapear» esta carpeta con el contenedor Docker con Ansible (si lo tenemos doquerizado), modificaremos el fichero docker-compose.yml y añadiremos una línea para realizar este mapeo:

Si hemos tenido que modificar el fichero docker-compose.yml, detendremos los contenedores y los volveremos a iniciar con esta nueva configuración, desde la carpeta donde tengamos el fichero docker-compose.yml ejecutaremos los siguientes comandos:

Crear playbook y tarea para copia de seguridad de switches en Ansible

Ansible permite conexión con cualquier dispositivo que admita SSH mediante la librería paramiko (Python), aunque esta herramienta no funciona bien con dispositivos antiguos, por el mecanismo de cifrado. En este estudio de caso, realizamos conexión con cada dispositivo usando sshpass del propio equipo Linux anfitrión, para compatibilidad con dispositivos antiguos.

Para usar sshpass, lo instalaremos en el equipo Linux con Ansible, con el comando:

Crearemos el fichero de playbook en la carpeta establecida a tal efecto:

Pegaremos el siguiente contenido para el playbook

Crearemos la tarea en Ansible Semaphore para ejecutar este playbook. Desde «Plantillas de Tareas» – «Nueva plantilla» – «Ansible Playbook»:

Estableceremos los siguientes datos para la nueva tarea:

  • Nombre: backup_switches_cisco.
  • Ruta al archivo de playbook: backup_switches_cisco.yml. Este campo es muy importante, indicaremos el nombre exacto del fichero de playbook a ejecutar.
  • Inventario: muy importante elegir el inventario de switches creado anteriormente, en este caso «switches_cisco».
  • Repositorio: Local.
  • Grupos de Variables: en este caso no usamos grupos de variables, aunque como es un campo obligatorio, elegiremos cualquiera.

Probaremos la tarea ejecutándola:

La tarea se ejecutará, conectará con cada switch del inventario, ejecutará el comando para obtener la configuración y la transferirá y guardará en un fichero en la carpeta del servidor Ansible:

Desde el servidor Linux de Ansible, podremos comprobar que se habrá creado una carpeta por cada switch del inventario y, dentro de cada carpeta, los ficheros de las configuraciones que se vayan guardando (uno por cada ejecución de la tarea). El fichero de copia de seguridad de la configuración contiene, precisamente, la configuración completa del switch:

Una vez revisada la tarea, cuando funcione correctamente, crearemos la programación para que se ejecute, cada cierto tiempo, de forma automática. Desde «Horario» – «Nuevo horario» – «Cron»:

Indicaremos el nombre de la programación, el Template (backup_switches_cisco) y la periodicidad, por ejemplo un día a la semana:

A partir de ahora, cada jueves a las 15:05 se ejecutará la tarea y guardará la configuración de cada switch en carpeta local del servidor Ansible.

Playbook para switches Huawei, HP / Aruba y otros fabricantes

Para revisar las diferencias y para ver que también funcionará con switches Huawei y HP / Aruba, indicamos los playbooks compatibles con cada uno de ellos. Podemos comprobar que únicamente varía el comando para obtener la configuración.

Para switches Huawei:

Para switches HP / Aruba:

Mostramos una tabla con el comando de obtener la configuración por fabricante de switch y el comando final a indicar en el playbook de Ansible:

FabricanteComando para extraer la configuraciónComando para desactivar paginaciónCadena final en el Playbook
Cisco IOSshow running-configNo suele requerir (en comando directo)'show running-config'
Huawei VRPdisplay current-configurationscreen-length 0 temporary'screen-length 0 temporary && display current-configuration'
HP / Arubashow running-configno page'no page && show running-config'
Juniper JunOSshow configuration| no-more'show configuration | no-more'
TP-Link (JetStream)show running-configterminal length 0'terminal length 0 && show running-config'
Fortinet (FortiSwitch)showNo requiere (vía SSH no pagina por defecto)'show' o 'show full-configuration'