viernes, 16 de julio de 2021

 Automatización de la red

Cisco Network Academy
Publicado el 16 de Julio del 2021

La automatización está en todas partes, desde las cajas registradoras de autoservicio en las tiendas y los controles ambientales de los edificios automáticos hasta automóviles y vehículos autónomos. La automatización reduce y con el tiempo, elimina, la necesidad de intervención humana.

Algunas de las ventajas- Las máquinas pueden trabajar las 24 horas sin interrupciones y con resultados más uniformes. - La automatización permite la recolección de grandes cantidades de datos, los cuales pueden analizarse rápidamente y generar información, que guíe un evento o proceso. - Los robots se utilizan en condiciones peligrosas reduciendo el riesgo para las personas.

Cada vez que un dispositivo toma una decisión, en función de información externa, dicho dispositivo se conoce como dispositivo inteligente. En la actualidad muchos dispositivos con los que interactuamos se consideran inteligentesPara que un dispositivo inteligente pueda "pensar", debe ser programado utilizando herramientas de automatización de red. Estos dispositivos son pequeñas computadoras.

Para que un dispositivo inteligente, como un actuador, reaccione a condiciones cambiantes, debe ser capaz de recibir e interpretar la información enviada por otro dispositivo inteligente, como un sensor. Estos dos dispositivos inteligentes deben compartir un "lenguaje" en común, el cual es llamado formato de datos

Los formatos son simplemente una manera de almacenar e intercambiar datos de una manera estructurada. Uno de esos formatos es el Lenguaje HTML. HTML es un estándar que describe la estructura de las páginas web, como se aprecia en la imagen.


Existen algunos formatos de datos comunes que son usados en muchas aplicaciones incluidas automatización de la red y programación;
 - Notación de objeto de JavaScript (JavaScript Object Notation - JSON)
 - Lenguaje de marcado extensible (XML)
 - YAML no es un lenguaje de marcado (YAML Ain’t Markup Language - YAML)

El formato de datos seleccionado dependerá del formato que es usado por la aplicación, herramienta o las instrucciones que usted esté usando. Muchos sistemas pueden soportar más de un formato, lo que le permite al usuario elegir el preferido.

El formato de datos posee reglas y estructuras similares a los que tenemos en programación y lenguajes escritos. Cada formato va a tener características específicas:

 - La sintaxis, incluye diferentes tipos de símbolos, tales como [ ], ( ), { }, el uso de espacio o sangría, comillas, comas, y más.
 - ¿Cómo se representan los objetos?, como caracteres, una cadena de caracteres, una lista, y vectores.
 - ¿Cómo se representan los pares llave/valor (key/value)? La llave (key) usualmente se encuentra al lado izquierdo e identifica o describe los datos. El valor (value) que se encuentra al lado derecho, consiste en los datos, los cuales pueden ser caracteres, cadenas de caracteres, números, listas o cualquier otro tipo de información.

Estos tres formatos se ven así:

Formato JSON

Formato YAML

Formato XML

Formato Datos JSON

JSON es un formato legible para humanos, usado por aplicaciones para almacenar, transferir y leer información. JSON es relativamente popular y es usado por servicios web y API para brindar información pública. Esto se debe a que es fácil de analizar y puede ser usado con la mayoría de lenguajes de programación moderno, entre ellos Python.

El siguiente ejemplo muestra el resultado parcial de ejecutar el comando: 
 show interface GigabitEthernet0/0/0 en el router.





Esta misma información puede ser mostrada usando el formato JSON. Nótese que cada objeto (cada par de llave/valor) es una porción de información diferente acerca de las interfaces, incluyendo su nombre, una descripción, y si se encuentra habilitada.


Estas son algunas de las características de el formato JSON:

- JSON utiliza una estructura jerárquica y contiene valores anidados.
- Utiliza llaves { } para almacenar objetos y corchetes [ ] para almacenar vectores.
- Su información es escrita en pares llave/valor (key/value).

El objeto consiste en uno o mas pares de key/value contenidos dentro de llaves { }. La sintaxis de un objecto JSON incluye:

- Las llaves deben ser cadenas de caracteres contenidas dentro de comillas " ".
- Los valores deben ser un tipo de información válida (cadena de caracteres, números, vectores, valores booleanos, carácter nulo, u otro objecto).
- Los valores son separados por dos puntos ( :).
- Múltiples pares de llaves/valores dentro de un objeto se separan mediante comas.
- El espacio en blanco no tiene relevancia.


Un
vector en JSON es una lista ordenada de valores. Las características de un vector en JSON incluyen:
- La llave debe ser seguida por dos puntos (:) y una lista de valores contenidos dentro de corchetes  [ ].
- Un vector puede almacenar diferentes tipos de valores como caracteres, números, valores booleanos, objectos u otro vector.
- Cada valor dentro del vector es separado por una coma.

Lista JSON de direcciones IP




















Ejemplo, la lista de direcciones IPv4 podría verse de la siguiente manera. 
- La llave es “addresses”. Cada entrada de la lista es un objecto independiente, separado por llaves { }. 
Los objetos son dos pares de llaves/valores: una dirección IPv4 ("ip") y una máscara de red ("netmask") separados por una coma. El vector es una lista separa por una coma seguido de una llave de cierre



Formato YAML
YAML es otro tipo de formato usado por aplicaciones para almacenar, transferir y leer información, el cual es legible por humanos. Algunas de las características de YAML incluyen:

- Es considerado una versión mejorada de JSON.
- Tiene un formato minimalista, lo cual lo hace fácil de leer y escribir.
- Utiliza la sangría para definir su estructura, sin utilizar corchetes o comas .
Por ejemplo, observe la siguiente información en formato JSON, relacionada a la interfaz Gigabit Ethernet 2.

Formato JSON
   









 






Formato YAML













La misma información en formato YAML es más fácil de leer. Similar a JSON, un objeto en YAML se compone de uno o mas pares de llaves/valores. Las llaves y los valores, son separados por medio de dos puntos sin el uso de comillas. En YAML, un guión es usado para separar cada elemento de un lista


Formato XML

XML es un formato más que se utiliza para almacenar, transferir y leer información desde aplicaciones. Algunas de las características de XML incluyen:
- Es similar a HTML , el cual es el lenguaje de marcado generalizado para la creación de páginas y aplicaciones web.
- Es auto-descriptivo. Contiene información dentro de un conjunto de etiquetas: <tag>data</tag>
- A diferencia de HTML, XML no utiliza etiquetas predefinidas, ni una estructura de documento.

Los objetos XML se componen de uno o más pares de llave/valor (key/value), en los cuales la etiqueta inicial funciona como llave: <key>value</key>

El siguiente ejemplo muestra la misma información de GigabitEthernet2 en formato XML. Nótese como los valores están contenidos dentro de las etiquetas de objeto. En este ejemplo, cada par de llaves/valores esta en una línea separada y en algunas se utiliza sangría. Esto último no es requerido, pero se utiliza para mejorar la lectura.
La lista utiliza instancias repetitivas de las etiquetas <tag></tag> para cada elemento de la lista
Los elementos dentro de estas instancias representan uno o más pares de llaves/valores (key/value).















API - Application Programming Interface

APIs se encuentra prácticamente en todos los sistemas. Amazon Web Services, Facebook, y dispositivos de automatización como los termostatos, refrigeradores y sistemas inalámbricos de iluminación utilizan APIs. También se utilizan en la creación de redes automatizadas

API es un programa que permite a otras aplicaciones accesar a su información o sus servicios.
API es un conjunto de reglas que describe cómo una aplicación puede interactuar con otra, y las instrucciones para que esa interacción ocurra.
El usuario envía una solicitud API a un servidor solicitando información especifica y recibe una respuesta API desde el servidor con la información solicitada.

Una API es similar a un mesero en un restaurante, como se muestra en el siguiente ejemplo. Un cliente desea que le entreguen comida a su mesa. La comida está en la cocina donde es cocinada y preparada. El mesero es el mensajero, similar a una API. El mesero (la API) es una persona que toma la orden del cliente (la solicitud) y le dice a la cocina que hacer o que deben preparar. Cuando la comida esta lista, el mesero entrega la comida (la respuesta) al cliente.


La API actúa como una especie de mensajero entre la aplicación solicitante y la aplicación en el servidor que proporciona los datos o el servicio.
El mensaje de la aplicación solicitante al servidor donde residen los datos se conoce como una llamada a la API.

Las APIs pueden ser desarrolladas con tres tipos de acceso:


Tipos de APIs de servicios web

Un servicio web es un servicio que está disponible a través de Internet, utilizando la World Wide Web. Existen cuatro tipos de APIs de servicios web:

- Protocolo simple de acceso a objetos (SOAP, Simple Object Access Protocol)
- Transferencia de estado representacional (REST, Representational State Transfer)
- Llamada a procedimiento remoto de lenguaje de marcado extensible (XML-RPC, eXtensible Markup Language-Remote Procedure Call)
- Llamada a procedimiento remoto de notación de objetos JavaScript (JSON-RPC, JavaScript Object Notation-Remote Procedure Call)

Las API SOAP se consideran lentas de analizar, complejas y rígidas, esto llevó al desarrollo de un marco de API REST más simple que no requiere XML. REST utiliza HTTP, es menos detallado y es más fácil de usar y se ha vuelto popular debido a su rendimiento, escalabilidad, simplicidad y confiabilidad (80% de todos los tipos de API)

RPC es cuando un sistema solicita que otro sistema ejecute código y devuelva la información. XML-RPC es un protocolo desarrollado antes de SOAP y más tarde evolucionó en lo que se convirtió en SOAP. JSON-RPC es un protocolo muy simple y similar a XML-RPC.


REST
REST es actualmente la API más utilizada. En este tema se trata REST con más detalle.

API REST y RESTful
Los exploradores web utilizan HTTP o HTTPS para solicitar (GET) una página web. Si se solicita correctamente (código de estado HTTP 200), los servidores web responden a las solicitudes GET con una página web codificada HTML, como se muestra en la figura.

Una API REST es una API que funciona encima del protocolo HTTP. Define un conjunto de funciones que los desarrolladores pueden usar para realizar solicitudes y recibir respuestas a través del protocolo HTTP como GET y POST.

El cumplimiento de las restricciones de la arquitectura REST generalmente se conoce como "RESTful".

Una API puede considerarse "RESTful" si tiene las siguientes características:
- Cliente/servidor - El cliente maneja el front-end y el servidor maneja el back-end. Cualquiera de los dos puede ser reemplazado independientemente del otro.
- Sin estado - No se almacenan datos del cliente en el servidor entre solicitudes. El estado de la sesión se almacena en el cliente.
- Cacheable - los clientes pueden almacenar en caché las respuestas localmente para mejorar el rendimiento.


Implementación RESTful
Un servicio web RESTful se implementa mediante HTTP. Es una colección de recursos con cuatro aspectos definidos:

1- Identificador uniforme de recursos (URI) base para el servicio web, como http://example.com/resources.
2- El formato de datos admitido por el servicio web. A menudo es JSON, YAML o XML, pero podría ser cualquier otro formato de datos que sea un estándar de hipertexto válido.
3- El conjunto de operaciones admitidas por el servicio web mediante métodos HTTP.
4- La API debe estar controlada por hipertexto.

Las API RESTful utilizan métodos HTTP comunes, como POST (Crear), GET (Leer), PUT /PATCH (Actualizar y DELETE (Eliminar ).

En la figura, la solicitud HTTP solicita datos con formato JSON. Si la solicitud se construye correctamente de acuerdo con la documentación de la API, el servidor responderá con datos JSON. La aplicación web de un cliente puede utilizar estos datos JSON para mostrar los datos. 


Cómo puedo ejecutar una solicitud usando API REST?
- Con el navegador usando HTTP
- Con línea de comando usando CURL
- Con una aplicación usando POSTMAN
- Con un lenguaje de programación como PYTHON, JAVASCRIPT y otros.

Las APIs RESTful usa métodos HTTP de solicitud y respuesta cliente / servidor, estos métodos son:


Los recursos web y los servicios web, como las API RESTful, se identifican mediante un URI

Un URI es una cadena de caracteres que identifica un recurso de red específico. Como se muestra en la figura, un URI tiene dos especializaciones:

- Nombre uniforme de recurso (URN): -identifica solo el espacio de nombres del recurso (página web, documento, imagen, etc.) sin referencia al protocolo.

- Localizador uniforme de recursos (URL): - define la ubicación de red de un recurso específico en la red. Las URL HTTP o HTTPS se usan típicamente con los navegadores web. Otros protocolos como FTP, SFTP, SSH y otros pueden usar una dirección URL. Una URL que usa SFTP podría tener el siguiente aspecto: sftp: //sftp.example.com.

Partes de un URI:
- Protocolo / esquema: - HTTPS u otros protocolos como FTP, SFTP, mailto y NNTP
Nombre de host: www.example.com
Ruta y nombre de archivo : /author/book.html
Fragmento - # página155

En un servicio web RESTful, una solicitud realizada al URI de un recurso. La respuesta será una carga normalmente formateada en JSON, pero podría ser HTML, XML o algún otro formato. La figura muestra el URI de la API de direcciones de MapQuest. La solicitud de API es para indicaciones desde San José, California hasta Monterey, California y se muestra las partes de la solicitud API.

- Servidor API: - es la dirección URL del servidor que responde a las solicitudes REST. En este ejemplo es el servidor de la API de MapQuest.
- Recursos - especifica la API que se está solicitando. En este ejemplo es la API de direcciones de MapQuest.
- Consulta: - especifica el formato de datos y la información que el cliente solicita al servicio de API. Las consultas pueden incluir:

- Formato: - normalmente es JSON, pero puede ser YAML o XML. En este ejemplo se solicita JSON.
- Clave: - La clave es para autorización, si es necesario. MapQuest requiere una clave para su API de direcciones. En el URI anterior, deberá reemplazar "KEY" por una clave válida para enviar una solicitud válida.
Parámetros: - los parámetros se utilizan para enviar información relativa a la solicitud. En este ejemplo, los parámetros de consulta incluyen información acerca de las direcciones que necesita la API para que sepa qué direcciones devolver: "from-San + Jose, Ca" y "to-Monterey, Ca".




Aplicaciones de API RESTful

Muchos sitios web y aplicaciones utilizan las API para acceder a la información y proporcionar el servicio a sus clientes. Por ejemplo, cuando se utiliza un sitio web de servicio de viajes, el servicio de viajes utiliza la API de varias aerolíneas para proporcionar al usuario información de aerolíneas, hoteles y otra.

Algunas solicitudes de API RESTful se pueden realizar escribiendo el URI desde un explorador web. La API de direcciones de MapQuest es un ejemplo de esto. Una solicitud de API RESTful también se puede realizar de otras maneras.


A. Podemos hacer una llamada al API por HTTP
mediante el navegador ingresando:

        https://ipinfo.io/72.163.4.185/json
Esta es la respuesta





















Esta API nos dará la ubicación en base a la dirección IP. Si consultas cuál es tu IP y luego haces la consulta a la API, te debe dar tu ubicación.














B.- Ahora vamos a hacer una llamada desde línea de comandos del Windows, usando la herramienta CURL y obtendremos los datos JSON similares al caso anterior.
















C.- También se puede hacer mediante una aplicación en JavaScript



D.- También podemos usar Python para hacer la consulta, mediante el siguiente código:













Puedes practicar Python en https://trinket.io sin instalar la aplicación y además te van a enseñar de manera muy fácil.

Adjunto la consulta con Python a mi dirección IP:












Muchas API RESTful, incluidas las API públicas, requieren una clave. La clave se utiliza para identificar el origen de la solicitud a través de la autenticación. Estas son algunas razones por las que un proveedor de API puede requerir una clave:
- Para autenticar la fuente y asegurar de que esté autorizada para usar la API
- Para limitar el número de personas que usan la API
- Para limitar el número de solicitudes por usuario.
- Para capturar y rastrear mejor los datos que solicitan los usuarios
- Para recopilar información sobre las personas que usan la API

Nota : Si desea utilizar la API de MapQuest, la API requiere una clave. Busque en Internet la URL para obtener una clave MapQuest. Utilice los parámetros de búsqueda: developer.mapquest. También puede buscar en Internet la URL actual que describe la política de privacidad de MapQuest.

E.- Mediante protocolos como NETCONF (NET CONFiguration) y RESTCONF, los sistemas operativos de red están empezando a proporcionar un método alternativo para la configuración, la supervisión y la administración. Por ejemplo, la salida siguiente podría ser la respuesta de apertura de un router después de que el usuario haya establecido una sesión NETCONF en la línea de comandos. Sin embargo, trabajar en la línea de comandos no es automatizar la red. En su lugar, un administrador de red puede utilizar scripts de Python u otras herramientas de automatización, como Cisco DNA Center, para interactuar mediante programación con el router.


Herramientas de administración de configuración

Como se mencionó en la introducción a este módulo, la configuración de una red puede llevar mucho tiempo. Las herramientas de administración de configuración pueden ayudar a automatizar la configuración de routers, switches, firewalls y muchos otros aspectos de su red.

Los router, switches, y firewalls son tradicionalmente administrados usando el CLI, Cuando hay un cambio o una nueva característica, la configuración se deben hacer manualmente en todos los dispositivos apropiados,, esto no sólo consume mucho tiempo, sino que también puede ser propenso a errores. El problema es mayor si la red es más grande.

El protocolo simple de administración de redes (SNMP) se desarrolló para que se puedan administrar nodos como: servidores, estaciones de trabajo, routers, switches y dispositivos de seguridad en una red IP. Usando una estación de administración de red (NMS, network management station), SNMP permite a los administradores de red supervisar y administrar el rendimiento de la red, buscar y resolver problemas de red y realizar consultas para estadísticas.
SNMP funciona razonablemente bien para la supervisión de dispositivos. Sin embargo, no se utiliza normalmente para la configuración debido a problemas de seguridad y dificultad en la implementación. Aunque SNMP está ampliamente disponible, este no puede servir como una herramienta de automatización para las redes actuales.

También puede usar las API para automatizar la implementación y administración de recursos de red. En lugar de que el administrador de red configure manualmente los puertos, las listas de acceso, la calidad de servicio (QoS) y las directivas de equilibrio de carga, pueden usar herramientas para automatizar las configuraciones. Estas herramientas se enlazan a las APIs de red para automatizar las tareas rutinarias de aprovisionamiento de red, lo que permite al administrador seleccionar e implementar los servicios de red que necesitan. Esto puede reducir significativamente muchas tareas repetitivas y mundanas para liberar tiempo para que los administradores de red trabajen en cosas más importantes.



Automatización de la red

Nos estamos alejando rápidamente de un mundo en el que un administrador de red administra unas pocas docenas de dispositivos de red, a uno en el que están implementando y administrando cientos, miles e incluso decenas de miles de dispositivos de red complejos (tanto físicos como virtuales) con la ayuda de software

Esta transformación se está extendiendo rápidamente desde sus inicios en el centro de datos, a todos los lugares de la red. Existen métodos nuevos y diferentes para que los operadores de red supervisen, administren y configuren automáticamente la red. Como se muestra en la figura, estos incluyen protocolos y tecnologías como REST, Ansible, Puppet, Chef, Python, JSON, XML y más.


Herramientas de administración de configuración

Las herramientas de administración de configuración utilizan las solicitudes de API RESTful para automatizar tareas y pueden escalar en miles de dispositivos, mantienen las características de un sistema o red para la coherencia.
Características de la red que los administradores se benefician de la automatización:
- Control de versión de software’
- Atributos del dispositivo, como nombres, direccionamiento y seguridad
- Configuración de protocolos
- Configuraciones de ACL

Las herramientas de gestión de la configuración suelen incluir automatización y orquestación.
- La automatización realiza automáticamente una tarea en un sistema. Esto podría estar configurando una interfaz o implementando una VLAN.
- La orquestación es el proceso de cómo deben realizarse todas estas actividades automatizadas, como el orden en el que deben realizarse, lo que debe completarse antes de que se inicia otra tarea, etc. La orquestación es la organización de las tareas automatizadas que da como resultado un proceso de coordenadas o un flujo de trabajo.

Hay varias herramientas disponibles para facilitar la gestión de la configuración: (Ansible, Chef, Puppet y SaltStack)


Estas herramientas vienen con documentación de API para configurar solicitudes de API RESTful. Todos ellos admiten JSON y YAML, así como otros formatos de datos. En la tabla siguiente se muestra un resumen de una comparación de las principales características de las herramientas de administración de configuración de Ansible, Puppet, Chef y SaltStack

- Lenguaje de programación - Ansible y SaltStack están construidos en Python, mientras que Puppet y Chef están construidos en Ruby. Al igual que Python, Ruby es un lenguaje de programación de código abierto que es multiplataforma. Ruby generalmente se considera un lenguaje más difícil de aprender que Python.
- ¿Basado en agentes o sin agente? - La administración de configuración está basada en agentes o sin agente. La administración de configuración basada en agente se "basa en extracción", lo que significa que el agente del dispositivo administrado se conecta periódicamente con el maestro para obtener su información de configuración. 
La administración de configuración sin agente está "basada en inserción". Se ejecuta un script de configuración en el maestro. El maestro se conecta al dispositivo y ejecuta las tareas del script. 
- ¿Cómo se administran los dispositivos? - Esto radica en un dispositivo llamado El Master en Títeres, Chef y SaltStack. Sin embargo, debido a que Ansible no tiene agentes, cualquier equipo puede ser el controlador.
- ¿Qué crea la herramienta? - Los administradores de red utilizan herramientas de administración de configuración para crear un conjunto de instrucciones a ejecutar. Cada herramienta tiene su propio nombre para estas instrucciones: Libro de jugadas, Libro de cocina, Manifiesto y Pilar. Común a cada uno de estos es la especificación de una directiva o una configuración que se va a aplicar a los dispositivos. Cada tipo de dispositivo puede tener su propia directiva. Por ejemplo, todos los servidores Linux podrían obtener la misma configuración básica y la misma directiva de seguridad.


IBN y Cisco DNA Center

Intent-Based Networking (IBN) y Cisco Digital Network Architecture (DNA) Center pueden ayudar a reunir todo para crear una red automatizada.

IBN es el modelo de industria emergente para la próxima generación de redes. IBN se basa en las redes definidas por software (SDN), transformando un enfoque manual y centrado en el hardware para diseñar y operar redes en uno que esté centrado en el software y totalmente automatizado.

Los objetivos de negocio para la red se expresan como intención. IBN captura la intención del negocio y utiliza análisis, aprendizaje automático y automatización para alinear la red de forma continua y dinámica a medida que cambian las necesidades del negocio.

IBN captura y traduce la intención empresarial en políticas de red que se pueden automatizar y aplicar de forma coherente en toda la red.

Cisco considera que IBN tiene tres funciones esenciales: traducción, activación y seguridad. Estas funciones interactúan con la infraestructura física y virtual subyacente, como se muestra en la figura.

Fabric es un término utilizado para describir una superposición que representa la topología lógica utilizada para conectarse virtualmente a los dispositivos, como se muestra en la figura. La superposición limita el número de dispositivos que el administrador de red debe programar. También proporciona servicios y métodos de reenvío alternativos no controlados por los dispositivos físicos subyacentes. 
Mediante una solución IBN, el administrador de red puede especificar a través de directivas exactamente lo que sucede en el plano de control de superposición. Observe que cómo los switches están conectados físicamente no es una preocupación de la superposición.


Arquitectura de red digital (DNA, Digital Network Architecture)
Cisco implementa el fabric IBN utilizando Cisco DNA. Como se muestra en la figura, la intención comercial se implementa de forma segura en la infraestructura de red (la estructura). Cisco DNA recopila continuamente datos de una multitud de fuentes (dispositivos y aplicaciones) para proporcionar un rico contexto de información. Esta información puede analizarse para asegurarse de que la red se desempeña de manera segura en su nivel óptimo y de acuerdo con la intención comercial y las políticas de red.


Cisco DNA es un sistema que está constantemente aprendiendo, adaptándose para satisfacer las necesidades del negocio.

Algunos productos y soluciones de Cisco DNA:
- Acceso definido por software
- SD-WAN
- Cisco DNA Assurance
- Cisco DNA Center Security


Para iniciar en la programación de redes, debes primero ingresar a: 
        https://developer.cisco.com/

Dentro de esta página selecciona "Empezar ahora"

Ahora tienes la oportunidad de aprender diferentes habilidades que te ofrece DevNet, dentro de las cuales sería conveniente elegir a los dos primeros, Codificación y Redes


Cuando intentes acceder a algún tema te va a pedir que inicies sesión, usa el usuario de Netacad.




ANSIBLE Network Automation Lab básico

Una actividad práctica con Ansible a través de este video que lo ofrece gentilmente Sea CCNA , lo puedes ver desde aquí o desde su canal, donde vas a encontrar material muy importante.


Cuando nos preguntamos que es Ansible: encontramos que es un software que automatiza el aprovisionamiento de software, la gestión de configuraciones y el despliegue de aplicaciones, está categorizado como una herramienta de orquestación, muy útil para los administradores de sistemas.

Ansible trabaja, generalmente, ejecutando tareas sobre equipos remotos, dispositivos de red o APIs, en nuestro caso nos interesa ejecutar tareas sobre los routers y switches remotos de la red. Los inventarios, que pueden fijarse en formato Ansible JSON o YAML, permiten definir dichos equipos, agruparlos y especificar valores grupales o individuales de estos.

Ansible es un software muy fácil de instalar, para ello, solo se necesita un Ansible Controller ejecutando un sistema operativo basado en UNIX. En mi caso voy a usar Centos6.

Vamos a bajar el OVA de Centos6 la versión de solo CLI (Mínima instalación) para VmWare Player, desde:
   https://www.linuxvmimages.com/how-to-use/vm-image-password/

Una vez importada en VmWare, se inicia (Play) e ingresa usando:
    user =             centos
    password =     centos 

Para pasar a root, use: sudo su -


Para tener acceso a un router Cisco del sandbox, podemos usar el siguiente enlace, en el cual vas a poder experimentar, sin necesidad de hacer reservas y también sin necesidad de usar la conexión VPN.

 https://devnetsandbox.cisco.com/RM/Diagram/Index/27d9747a-db48-4565-8d44-df318fce37ad?diagramType=Topology

Por si no funciona el enlace aquí otra opción: Link al router

Debes iniciar sesión con el ID de Netacad, espera que cargue la página de devnetsandbox y vas a tener a la derecha un router en el cual vas a poder experimentar todos los comando que estamos acostumbrados en Cisco.
En la parte izquierda están los datos de la dirección y además, el usuario y password.

Lo más importante:
    Host CSR1000V: sandbox-iosxe-recomm-1.cisco.com
    Puerto SSH: 22
    Nombre de usuario: developer
    Contraseña: C1sco12345

Puedes usar el Putty para acceder: (Open)


Ingresas el usuario y password y ya podrás tener acceso al modo privilegiado del router.


 
Volvemos ahora a la máquina virtual con Centos6.

En la maquina virtual no hay acceso a Internet, no tiene IP, para solucionarlo se debe pasar a root: sudo su -

Ejecuta el comando: dhclient

Y ya puedes ver que aparece una IP con el comando ifconfig
y puedes hacer ping a 8.8.8.8
 
Para actualizar el Centos use el comando:
yum update -y

de manera automática se realizará todo el proceso.

Instalamos ahora Ansible
yum install ansible -y

también lo realizará de manera automática

Nos pasamos al directorio de Ansible
  cd /etc/ansible

Listamos los archivos de este directorio:

Se debe editar el archivo ansible.cfg
    vi ansible.cfg

Quitando el # y dejando la sentencia así:
    host_key_checking = False
    
Con i se inserta el texto
Con :wq + Enter  salvamos y salimos del editor.

Ahora hay que editar el archivo hosts igual que antes con vi
       vi hosts 

Le debemos agregar al final la lista de routers y los datos de acceso:
    [routers]
    sandbox-iosxe-recomm-1.cisco.com

    [routers:vars]
    ansible_user=developer
    ansible_password=C1sco12345
    ansible_connection=network_cli
    ansible_port=22

        


Ansible permite acceder a los hosts, en este caso a los routers.

usemos el siguiente comando:
   ansible routers -m ping

esta es una prueba de ansible aplicado al grupo [routers], usando el módulo "-m" ping
A continuación vemos que hay respuesta del router de Cisco en el SandBox.


Otra prueba, en la cual vamos a pedirle al router, mediante Ansible, que nos muestre que interfaces tiene, para ello deberá aplicar el comando: "show ip interface brief" remotamente:
    ansible routers -m ios_command -a "commands=´show ip inter br´"

Para verificar que la respuesta es correcta, vemos la respuesta del Putty y comprobamos que son iguales.
Nótese que estas pruebas lo estoy haciendo al grupo de routers, si en el archivo de hosts hubiese considerado 20 direcciones de router, me daría 20 respuestas.

Ahora vamos a agregar información a los routers, usaremos la siguiente plantilla en un block de notas y lo guardamos con la extensión .yml


Vamos a usar winSCP para intercambiar archivos entre la máquina real y la vitual.
Debemos ingresar la IP de la máquina virtual y el usuario y password
Para ver la ip de la máquina virtual usa el comando:
ip a


Para acceder a la máquina virtual, la de la derecha, te solicita que ingreses la IP = 192.168.11.128, el usuario = centos y el password = centos, el archivo banner.yml lo vamos a copiar en (lo arrastramos de izquierda a derecha) /home/centos/

Regresamos a la máquina virtual y lo copiamos al directorio de ansible:
cd /home/centos
cp banner.yml /etc/ansible
cd /etc/ansible
ansible-playbook banner.yml


Para comprobar que se ha producido cambios de configuración en el router usando Ansible, accedo con Putty y encuentro los siguientes cambios:


Para hacer las configuraciones remotas de los routers, necesitamos conocer los diferentes módulos que ofrece Ansible en su documentación, por ejemplo para el caso que hemos desarrollado, puedes encontrar mas información en este link: Doc del modulo Banner

Para que sea compatible con nuestra versión, cámbiale el nombre del módulo:
        de   cisco.ios.ios_banner:   a    ios_banner:

El playbook para el banner queda así:


Si quisiéramos remover el banner se debe usar el estado "absent":

        - name: Remove the motd banner
           ios_banner:
              banner: motd
              state: absent

Otros módulos:

        



Luego de crear el archivo user.yml se lo transfiere a la máquina virtual


En la máquina virtual usamos Ansible para mandar esta orden


Para verificar que se ha creado el usuario calo, accedemos al router con el Putty y notamos que se ha agregado dicho usuario.