Vagrant es una herramienta de software libre, multiplataforma, para la creación y configuración de entornos de desarrollo virtualizados ligeros, reproducibles y portables. De este modo, podremos automatizar la creación y gestión de máquinas virtuales, las cuales podrán ser ejecutadas a través de diferentes gestores de máquinas virtuales (VirtualBox, VMWare, AWS e Hyper-V, entre otros).
Pero, ¿qué significa todo esto? pues que podremos preparar scripts de configuración de manera que cuando sea ejecutado por terceros se encuentren con una réplica exacta de nuestro entorno. ¿Y por qué lo necesito? porque Vagrant da respuesta a muchas de las problemáticas a las que se enfrentan los equipos de desarrollo y de administración de sistemas en el día a día.
Desde el punto de vista del desarrollo, garantiza a los equipos de desarrollo que todos sus miembros trabajen bajo una copia exacta del ambiente del proyecto (misma configuración y dependencias), evitando problemas de compatibilidad y facilitando la portabilidad del mismo. Resumiendo, nos olvidamos del eterno «…en mi ordenador funciona». Además, para las ejecución de pruebas en diferentes plataformas y entornos podremos crear tantos ambientes como sean necesarios para garantizar que nuestro código funciona y hace lo que tiene que hacer.
Desde el punto de vista de la gestión de la administración, permite a los administradores trabajar en entornos desechables y consistentes para el desarrollo y prueba de scripts de administración. Además, permite la configuración de múltiples máquinas virtuales con facilidad, hasta el punto de poder crear y configurar entornos completos.
Desde el punto de vista del diseñador, Vagrant proporciona un entorno totalmente preparado para una determinada aplicación web, de manera que el diseñador sólo tenga que centrarse en su trabajo. «Cada uno a lo suyo» será el nuevo lema de vuestro equipo de trabajo.
Y por último, no podemos olvidar una de las grandes ventajas de esta herramienta: su integración con herramientas de suministro (o provisioners) como Chef, Puppet y Ansible.
Bien, pues una vez enumeradas las bondades de esta herramienta, vamos a ver cómo instalarla en nuestros equipos y empezar a disfrutar de ella. Lo primero que debemos saber es el software necesario en nuestro ordenador personal:
- Software de virtualización instalado (cualquiera de los ya comentados, VMWare, Virtualbox, etc).
- Instalador de Vagrant para nuestro Sistema Operativo (SO).
Una vez descargado el instalador correspondiente, procederemos a instalar Vagrant siguiendo el procedimiento convencional para nuestro SO. De este modo, el instalador preparará nuestro equipo para incluir Vagrant en el path del sistema, de manera que posteriormente podamos hacer uso del mismo desde cualquier terminal. ¡Et voilà! ya lo tenemos listo para empezar a trabajar. Rápido, sencillo y para todos los equipos. ¡Continuemos!
Antes de seguir avanzando, me gustaría daros unas nociones y conocimientos básicos que facilitarán la lectura. Cualquier mente curiosa que haya navegado por la web buscando información acerca de esta herramienta se habrá tropezado con conceptos como box, Vagrantfile, provider, provisioner… ¿qué es todo esto? Bueno, vamos a averiguarlo juntos:
- Lo primero de todo, debe quedarnos claro el concepto de box (caja): se trata del formato de paquetes para los entornos o imágenes base con las que vamos a trabajar de aquí en adelante y que nos permitirá montar máquinas virtuales totalmente funcionales en nuestro ordenador personal o proveedor de infraestructura.
- La máquina que se encarga de iniciar Vagrant (nuestro ordenador en este caso) es conocida como Host, mientras que por su parte la máquina (virtual) iniciada por el Host, haciendo uso de la box correspondiente, se conoce como Guest.
- El provider se encarga de gestionar el proceso de virtualización. Ya hemos comentado previamente que Vagrant soporta diferentes tecnologías y servicios.
- Por su parte, el provisioner automatiza la configuración de la máquina virtual así como la instalación de paquetes. Vagrant permite gestionar la configuración mediante comandos de terminal o haciendo uso de herramientas de suministro como Puppet, Chef y Ansible.
- Al fichero que contiene la definición de nuestra máquina (o máquinas) virtual se le conoce como Vagrantfile. Se trata de un fichero escrito en Ruby.
Ahora que ya tenemos claros los conceptos base, empecemos a configurar nuestra box. Cabe destacar que existen varios repositorios desde los que es fácil obtener una box con las características que más nos interesen. Los dos repositorios más conocidos son Vagrant Cloud y Vagrantbox. No obstante, puede darse el caso de que dichas boxes sean proporcionadas directamente por nuestros administradores.
Cuando nos proporcionan una box, o cuando hemos escogido una de un repositorio, debemos añadirla de la siguiente manera:
vagrant box add mi_caja_ubuntu_precise_32 http://files.vagrantup.com/precise32.box
Con este comando habremos descargado una box Ubuntu precise de 32 bits en un directorio propio de Vagrant (~/.vagrant.d/boxes) y bajo el nombre mi_caja_ubuntu_precise_32. Una vez añadida la box, lo siguiente será crear el fichero Vagrantfile correspondiente en el directorio que consideremos oportuno:
vagrant init
El fichero creado a partir de la sentencia anterior tiene un formato estándar. Podremos abrirlo con cualquier editor y observar que contiene multitud de código de ejemplo comentado, muy útil para nuestra primera incursión. Lo que debemos hacer ahora es especificar dentro de este fichero con qué box vamos a trabajar. Para ello, definimos la box de la siguiente manera:
config.vm.box = "mi_caja_ubuntu_precise_32"
Sin realizar más cambios en el fichero, podemos probar a iniciar la máquina virtual. Abrir un terminal y ejecutar el siguiente comando desde el directorio donde se encuentre nuestro fichero:
vagrant up
Una vez se ha levantado la instancia, para acceder a la misma debemos hacer uso de una conexión SSH, ya que no contamos con una interfaz gráfica:
vagrant ssh
También podremos acceder a la máquina a través de cualquier cliente SSH. Y con todo esto, ya tenemos una máquina preparada con la que podremos seguir aprendiendo más sobre Vagrant y sus muchas ventajas.
Existen más opciones para gestionar nuestra instancia, por ejemplo, para suspender el ambiente haremos:
vagrant suspend
En el momento que queramos reiniciarla nuevamente, hacer:
vagrant resume
Si, por el contrario, quisiéramos apagarla por completo:
vagrant halt
Incluso si queremos actualizar la configuración porque hemos modificado el Vagrantfile ejecutaríamos el siguiente comando (sería como hacer un halt seguido de un up):
vagrant reload
Posteriormente podremos configurar la red, especificar puertos para determinadas conexiones y preparar la configuración de los paquetes necesarios mediante nuestras herramientas de suministros habituales. Toda esta información podremos encontrarla en Primeros pasos con Vagrant. Además, la propia página del proyecto cuenta con una documentación bastante completa que os animo que visitéis.
Y esto es todo por ahora…. espero que os haya resultado de utilidad. ¡Nos leemos! 🙂