¿Qué es Ansible? ¿Para qué sirve?

Este es el primero de una serie de artículos sobre Ansible. Lo podemos considerar como el capítulo 0. En él veremos qué es y en que consiste este sistema de orquestación tan en boga últimamente.

¿Qué es ansible?

Si consultamos la definición de su página web oficial, podemos decir que “Ansible es un lenguaje universal, que desentraña el misterio de cómo se realiza el trabajo”, sin duda una definición un poco mística ? En Wikipedia encontramos que se trata de “una plataforma de software libre para configurar y administrar computadoras”. Vale esta definición me gusta más.

Desde mi experiencia os puedo decir que, sobre todo si tenemos que trabajar con multitud de dispositivos, no solo servidores, sino también dispositivos de red como switches o routers, o incluso trabajar con plataformas en la llamada nube, como AWS, Ansible nos puede ayudar, y mucho, en nuestro día a día.

Con permisos de otros sistemas como Puppet, del que ya hemos hablado, o Chef, Ansible se ha convertido en una de las herramientas de automatización más popular.

Es gratuita, ya que utiliza una licencia GNU GPL v3, sigue con la filosofía del código abierto y permite automatizar la mayoría de los elementos de una infraestructura. Esto es, desde servidores hasta dispositivos de red. Puede funcionar, con el rol de servidor, en sistemas GNU/Linux y tipo UNIX, como por ejemplo AIX, Solaris o BSD. En lo que respecta a la red, soporta dispositivos populares, como Cisco, Palo Alto o F5

Como hemos dicho anteriormente, también permite trabajar con los proveedores de la nube, como AWS, Azure o Google Cloud Platform. Gestionando componentes como redes, grupos de seguridad, direcciones IP o claves públicas.

Hace unos años Ansible fue adquirida por la compañía Red Hat

¿Para qué sirve Ansible?

Con él podemos instalar aplicaciones, orquestar servicios y tareas más avanzas. Como por ejemplo la llamada entrega continua (CD) y la llamada integración continua (CI) También se puede utilizar para la estandarización de sistema operativo (ya sabéis, estandarización de servicios instalados, de configuración de ficheros, versiones de software, etcétera) y la administración de servicios centralizados, como por ejemplo DNS.

Si tenemos infraestructura tipo “IaaS”, esto es, infraestructura como servicio, tiene soporte para plataformas como vmWare y OpenStack.

Veamos las ventajas que tiene Ansible, frente a otros productos:

  • Su instalación es muy sencilla
  • Gran compatibilidad con la mayoría de los elementos de nuestra infraestructura
  • Soporta la mayoría de las distribuciones
  • Una curva de aprendizaje muy corta, ya que utiliza una sintaxis simple y no se necesitan excesivos conocimientos de programación.
  • Una de las principales ventajas, frente a otros productos similares, es que no necesita tener un agente en los clientes que se gestionan. Primando de esta manera la seguridad al utilizar conexiones SSH o WinRM
  • Para configurar tareas complejas utiliza lenguaje YAML (Playbooks)

Ansible, permite diferentes formas de configuración. Ya sea mediante un solo fichero, llamado playbook, que debe contener todos los parámetros para hacer una tarea determinada, sobre un grupo de clientes determinado; o bien, mediante una estructura de directorios, por cada proyecto, separando los parámetros en ficheros, que más tarde se podrán importar desde otros playbooks.

Aún así también tiene alguna que otra desventaja:

  • Es menos potente que otros sistemas similares, en lo que respecta a la administración de configuraciones.
  • No trabaja bien con gran cantidad de elementos para administrar, ya que en estos casos, requiere configuraciones avanzadas, para así obtener un buen rendimiento.
  • Al tener tantos módulos disponibles, estos no siempre están actualizados.

Glosarios de conceptos

Veamos un resumen de los principales conceptos a tener en cuenta.

  • Facts: Información útil de los clientes.
  • Inventario: Incluye información, estática o dinámica, de los clientes administrados y su infomación.
  • Módulos: Son las librerías que se utilizan para controlar elementos como ficheros, servicios paquetes o comandos. Estos se copian al nodo cliente para que ejecute la tarea indicada.
  • Nodo: Objeto a administrar, ya sea un servidor, un router y otro elementos.
  • Play: Listareas de tareas a realizar en los clientes especificados en el Playbook.
  • Playbook: Se encarga de definir todas las tareas que debemos realizar sobre un conjunto de hosts clientes.
  • Roles: Es una agrupación de tareas, ficheros y plantillas, que pueden ser reutilizados.
  • Tareas: Definición de una acción a realizar.

Una vez aclarados estos conceptos, ya solo nos queda verlo en funcionamiento, pero eso será en la próxima entrada. 😉

Siguiente entradas:

Instalación de Ansible en GNU Linux

Para más información: Ansible.com