Ansible desde cero

El juego de ender, portada

Ansible es (cito textualmente):

Una plataforma de software libre para configurar y administrar computadoras. Combina instalación multi-nodo, ejecuciones de tareas ad hoc y administración de configuraciones. Adicionalmente, Ansible es categorizado como una herramienta de orquestación.Maneja nodos a través de SSH y no requiere ningún software remoto adicional. Dispone de módulos que trabajan sobre JSON y la salida estándar puede ser escrita en cualquier lenguaje. Nativamente utiliza YAML para describir configuraciones reusables de los sistemas.

Para todos los que os hayáis quedado igual, Ansible es una potente herramienta para configurar y gestionar equipos desde una ubicación remota, al contrario de cosas como Puppet, no es necesario crear un CPD entero de cacharros para configurar un par de máquinas, Ansible combina la dura sencillez del "Keep it simple stupid!" con el pragmatismo del "Si ya lo ha hecho otro no empieces de cero" de tal manera, que permite con una instalación mínima de software en el nodo de gestión operar sobre equipos con instalación base del sistema operativo, por lo que es ideal para integrar en entornos de gestión de máquinas virtuales como Vagrant. Sus principales características son:

  • Sencillez.- Las tareas son sencillos scripts conocidos como playbooks
  • Seguridad.- Al no instalar agentes en los equipos remotos no se generan vulnerabilidades
  • Fácil de aprender.- Realizar las tareas más básicas es bastante sencillo
  • Robustez.- Lo que se conoce como idempotencia (es decir, que sucesivas operaciones igual llevan siempre al mismo estado) permite ejecutar las tareas sin miedo a acabar en estados desconocidos por repetir tareas.

Como siempre, vamos a hacer una instalación basica en Debian, el software que debemos instalar es bastante básico:

apt-get install ansible
apt-get install sshpass # este paquete no es necesario pero veremos que va a ser útil para las primeras tareas.

Con esto tendremos una instalación básica de Ansible en nuestro equipo, Ansible en Debian, por seguir con su filosofía sitúa los ficheros de configuración en /etc/ansible ahí veremos un fichero ansible.cfg y un fichero hosts que analizaremos ahora con más detalle.

El fichero hosts, es un fichero INI típico, en una primera versión es algo del estilo:

[nombregrupo1]
servidor1
servidor2
servidor3
[nombregrupo2]
servidor2
servidor4

Podemos invocar los comandos o los Playbooks sobre un servidor o sobre un grupo, automatizando así las tareas sobre grupos de servidores iguales.

En el fichero hosts podemos además introducir grupos de grupos con la etiqueta :children :

[todosjuntos:children]
nombregrupo1
nombregrupo2

Este ejemplo es innecesario porque siempre podremos llamar al metagrupo all al invocar ansible que realizará la ejecución en todos los servidores, pero sirve a modo ilustrativo.

En el fichero hosts también es posible almacenar variables y vincularlas a servidores y grupos, estas variables podremos utilizar más adelante en los scripts, de esta manera, podemos generar scripts que nos sirvan para distintos servidores del mismo tipo pero con valores distintos:

[nombregrupo1:vars]
gateway_por_defecto=192.168.0.1
servidor_dns=192.168.0.250
red_de_confianza=192.168.0.0/24
[nombregrupo2:vars]
gateway_por_defecto=192.168.1.1
servidor_dns=192.168.1.250
red_de_confianza=192.168.1.0/24

Las variables también se pueden definir directamente en la definición del host:

servidor1 http_port=80 maxRequestsPerChild=200

Los ficheros hosts permiten más opciones, como dividir el fichero en distintos subficheros, definir los servidores como secuencias de servidores en un única línea o cosas similares, pero ya abordaremos eso más adelante, por ahora tenemos lo básico en los ficheros hosts para poder empezar a trastear con ansible.

En una instalación bien hecha, deberíamos crear un usuario para ansible, darle permisos con sudo en el servidor a administrar, generarle un certificado y utilizar ese certificado para acceder al servidor de forma segura, pero eso lo haremos más adelante, por ahora vamos a probar la instalación, si hemos instalado sshpass podremos proporcionar directamente la contraseña de ssh del usuario en cuestión al ejecutar el comando. Así que vamos a probar que los servidores tienen conectividad y que nuestro usuario puede hacer ssh hasta ellos:

ansible all -m ping -k -u ansible #usuario que he creado en el servidor para probar, puede ser cualquiera que tenga acceso ssh
SSH password:
servidor1 | success >> {
"changed": false,
"ping": "pong"
}
... (salida acortada)
servidor4 | success >> {
"changed": false,
"ping": "pong"
}

Con esto ya tenemos una instalación de ansible funcionando en nuestro entorno, dejo libre espacio para vincular con próximos artículos:

Preparando equipos para usar Ansible... con Ansible

<--- continuara --->

Etiquetas