Ansible
|
Ansible. Software de aprovisionamiento de sistemas, desplieque de aplicaciones y servicios, y orquestación para servidores e infraestructura. Es un software de código abierto bajo la licencia GPL3
Sumario
[ocultar]El problema del aprovisionamiento distribuido
Cuando se instala un sistema operativo nuevo a un equipo (o se reinstala sea por los motivos que sean), se le debe también instalar software adicional en forma de aplicaciones, servicios y otros programas para que el equipo sea funcional, esta labor de instalación y configuración adicional es lo que se le conoce como 'aprovisionamiento'
Lo normal (sobretodo si es un número bajo de equipos) es realizar este aprovisionamiento de forma manual, tanto si es un equipo personal como si es a un número muy escaso y manejable de equipos. Pero cuando ese número de equipos es mayor el proceso de aprovisionamiento se vuelve tedioso y propenso a errores, y es aquí donde hay que considerar qué opciones hay para automatizar el proceso
Hay muchas formas y métodos que han existido a lo largo de los años para automatizar los procesos de aprovisionamiento a gran escala, cualquier persona o empresa puede crear soluciones individuales, pero estas soluciones son a menudo sesgadas o específicas, y es aquí donde entra Ansible a resolver este problema
Características de Ansible
Minimalista
Ansible no requiere la instalación de agentes en los equipos remotos para su funcionamiento
Declarativo
La configuración de Ansible no consiste en decirle que realice una serie de pasos (imperativo) hasta llegar al objetivo, lo que se le hace es declarar un estado y es Ansible el responsable de alcanzar ese estado por su propia cuenta
Extensible
Las capacidades de Ansible son extensibles a través de módulos creados por la comunidad, que van desde la instalación de simples programas hasta creación de usuarios, redes, servicios e infraestructuras enteras
Estructura y funcionamiento
Ansible se compone de un equipo principal o de control, que es el que va a tener instalado a Ansible y uno o más equipos remotos
El equipo de control debe tener una comunicación ya configurada con cada equipo remoto mediante SSH (preferiblemente securizada mediante el uso de claves públicas y privadas y no por contraseña)
Cuando Ansible desde el equipo de control manda a ejecutar órdenes, estas órdenes se envían mediante SSH al equipo remoto (o a todos) y el agente de Ansible es el encargado de ejecutar esas órdenes en el equipo remoto en forma de comandos y la respuesta de estos comandos se envía al equipo de control
Componentes
Inventario
El Inventario es el conjunto de equipos remotos, representados por su IP o por su nombre de dominio
Los equipos en el inventario pueden dividirse en varios grupos para facilitar su administración
Ansible no puede actuar sobre equipos que no existan en el inventario
Tareas
Las Tasks (tareas) son funciones en las cuales se declara un estado, y al ejecutarlas, Ansible debe encargarse de ejecutar serie de órdenes y comandos para llegar a ese estado
Por ejemplo, una Task para instalar el servidor web NGINX y configurarlo, implica que Ansible por su cuenta debe realizar las siguientes acciones:
- Revisar si NGINX está instalado. En el caso de estarlo, marcar la tarea como completada
- Instalar NGINX
- Echar a andar el servicio de NGINX
Es decir, la Task para instalar NGINX no es "instalar NGINX", sino "NGINX debe estar instalado y funcionando"
Las tareas nuevas se obtienen mediante la instalación de módulos
Libro de tareas
Las tareas pueden ejecutarse de forma individual si uno lo desea, pero si se van a ejecutar múltiples tareas, se debe usar un Playbook o libro de tareas.
Un Playbook es un conjunto de tareas a realizar, y según el objetivo del playbook estas tareas pueden ejecutarse de formas específicas basándose en condiciones y resultados de otras tareas
Roles
Los roles son un tipo especial de Playbook hechos para realizar trabajos complejos
Colecciones
Las colecciones son un formato de distribución de playbooks, tareas, roles y módulos que pueden compartirse con otros usuarios