Creación de entornos con múltiples configuraciones en Vagrant con Ansible

En este tutorial vamos a ver cómo definir varias configuraciones para los roles de Ansible y cómo desplegarlos en Vagrant. Esto puede ser útil cuando tenemos entornos que utilizan un stack tecnológico similar (por ejemplo dos sitios web de WordPress).

Índice de contenidos


1. Introducción

Aquí nos vamos a centrar en qué modificaciones hay que hacer para poder definir múltiples configuraciones. En este otro tutorial podéis ver una explicación detallada sobre cómo instalar y el funcionamiento de Vagrant y Ansible.


2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2 Ghz Intel Core I7, 8GB DDR3).
  • Sistema Operativo: OS X El Capitan 10.11.6
  • Ansible 2.2.0.0
  • Vagrant 1.8.7

3. Host Vars

En nuestro proyecto de Ansible creamos una carpeta a la que llamaremos “host_vars”. En ella vamos a añadir un fichero por cada configuración diferente que queramos tener.

Por ejemplo vamos a ver cómo haríamos para un rol de MySQL.

Configuración 1 Configuración 2 De esta forma ejecutaremos el rol de MySQL cambiando el nombre de los usuarios y de la base de datos según nos interese.

4. Creación de JSON para el Vagrantfile

Una buena forma de añadir y modificar configuraciones de forma clara es crear un archivo JSON para cada configuración donde asignaremos la ip, el mapeo de los puertos, etc.

Es importante que los puertos en la máquina anfitriona (host) sean diferentes en cada configuración para evitar conflictos.

Una vez hecho esto, solo es necesario leer el archivo JSON en el Vagrantfile y asignar las variables, iterando sobre cada configuración que hayamos definido.


5. Modificación del Inventory

En este archivo añadimos una entrada por cada configuración que tengamos.

En este ejemplo “[grupoMaquinas]” hace referencia a ambas configuraciones y “maquina1” y “maquina2” a cada una por separado.

Es importante que el Inventory esté en la misma ruta que el directorio “host_vars” y que el nombre que le demos a cada configuración que definamos (en este caso “maquina1” y “maquina2”) sea el mismo que el nombre de cada fichero dentro de “host_vars”.


6. Desplegando en Vagrant

Ahora es necesario especificar la configuración que queremos usar al introducir los comandos de vagrant. Por ejemplo:


7. Conclusiones

Una vez hayamos modificado estos archivos, podemos seguir añadiendo todas las configuraciones que queramos de forma sencilla.

De esta forma, nos podemos asegurar que sólo cambia la configuración de cada entorno pero que los roles se instalan exactamente igual (mismos paquetes, versión…)


8. Referencias