en Workflow

Vagrant, o cómo manejar máquinas virtuales de forma sencilla

vagrant-logo

Vagrant ha sido una de mis mayores revelaciones técnicas de los últimos años. Con Vagrant se soluciona (de forma definitiva diría yo) uno de los problemas más grandes que hemos tenido siempre los desarrolladores: preparar/compartir el entorno de trabajo en el que estamos trabajando un proyecto.

Incorporando Vagrant a nuestro flujo de trabajo podemos solucionar las inconsistencias entre entornos (cosas que funcionan en local y que se rompen en producción) ya que podemos emular en una box vagrant las mismas características que tenemos en producción.

Y una configurado, cualquier persona, será capaz de descargar y lanzar ese entorno desde cualquier maquina en unos instantes.

Say goodbye to «works on my machine» bugs.

Vagrant nos proporciona una manera sencilla de configurar, lanzar y compartir entornos de trabajo construidos sobre maquinas virtuales.

Vagrant is a developer friendly interface for VirtualBox

Asi que en muchos casos no tendremos que perder tiempo preparando nuestro entorno de trabajo sino que podemos utilizar uno de los ya existentes (e incluso añadirlo a nuestro proyecto)

¿Qué necesito para poder utilizar Vagrant?

Para poder utilizar Vagrant necesitamos tener instaladas 2 cosas :

  • Virtual Box: El provider más popular (sobre todo por que es gratuito)
  • Vagrant: Con esto tendremos disponibles los comandos con los que podremos lanzar, parar y eliminar las maquinas virtuales de VirtualBox.

Creando mi primer proyecto vagrant

Para configurar una maquina vagrant utilizamos un archivo llamado Vagrantfile cuya misión es:

  • Fijar el directorio raíz de tu proyecto
  • Describir el tipo de maquina y los recursos que necesitas para tu maquina virtual. También puedes definir aquí qué software instalar y de qué manera.

Con vagrant instalado tenemos disponible el comando vagrant init que nos inicializa un proyecto vagrant creando un Vagrantfile donde lo hayamos lanzado

$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Este Vagrantfile es un modelo que está lleno de ejemplos y comentarios asi que lo podemos utilizar para investigar cómo funciona este archivo. Quitando la «paja» podemos dejar un Vagrantfile super-sencillo asi

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "hashicorp/precise32"
end

Con cada Vagrantfile definimos lo que se llama una box (o proyecto vagrant) que es un conjunto de SO y aplicaciones preparadas ya para ser utilizadas

En vagrantbox.es tienes una lista bastante amplia de boxes que puedes empezar a utilizar desde ya

Lanzando boxes Vagrant

La manera más rápida de empezar con Vagrant es descargar un Vagrantfile de alguna de las boxes ya existentes (y públicas)

mkdir test-first-vagrant && cd test-first-vagrant
vagrant init hashicorp/precise32

Con este comando nos descargamos el Vagrantfile y para lanzarla tenemos que hacer

vagrant up

Una vez «levantada» sólo queda conectarnos por ssh con

vagrant ssh

Y ya estas dentro de la maquina virtual (que en este ejemplo es una maquina linux Ubuntu 12.04 LTS 32-bit). Ya puedes trabajar y probar lo que quieras como si estuvieras en una maquina Linux

Si quieres probar una box diferente puedes mirar en vagrantbox.es la que te interese y añadirla haciendo

mkdir test-box-vagrant && cd test-box-vagrant
vagrant box add my_centos_lamp_stack http://devopera.com/node/63/download/centos6/doco6-lamp-vagrant.box
vagrant box init my_centos_lamp_stack

Con esto ya podemos hacer

vagrant up && vagrant ssh

para levantar la maquina y conectarnos a ella

¿Cómo funciona Vagrant?

Para explicarlo utilizaremos este gráfico de la gente de digitalforreallife.com

django

  • Con Vagrant, interactuamos a través de unos sencillos comandos. El comando principal es vagrant up (1) que arranca la maquina virtual (el equivalente a pulsar el botón de encendido de cualquier computadora)
  • Tambien tenemos el archivo Vagrantfile (2) que contiene las directivas con las que especificamos las características de la maquina virtual (virtual machine, VM) que estamos lanzando.
  • Una vez lanzado vagrant up, Vagrant hablará con VirtualBox (2) y le indicará qué VM (3) tiene que arrancar (previa descarga si es necesario)
  • Vagrant tambien hablará con los provisioners (4) que son los encargados de aprovisionar la VM, es decir, de instalar y configurar el software requerido para nuestro proyecto (5)
  • Una vez que la maquina ha sido creada, arrancada y aprovisionada, podemos conectar con ella via SSH (6), de la misma manera que conectariamos con cualquier servidor remoto (excepto que en este caso el servidor está en una VM local dentro de nuestra maquina)

Resumiendo

Comandos básicos de Vagrant

  • $ vagrant ssh Conexion SSH a la maquina virtual (virtual machine, VM)
  • $ vagrant up Arranca/reanuda la VM
  • $ vagrant halt Suspende la VM. Podemos reanudarla de nuevo con vagrant up
  • $ vagrant destroy Elimina la VM. La podremos arrancar/crear otra vez con vagrant up
  • $ vagrant provision Reconfigura (reaprovisiona) la VM después de algún cambio en el código fuente.
  • $ vagrant reload Recarga (relanza) la VM (útil si hemos hecho cambios en la red o las carpetas compartidas).

Terminología Vagrant

Boxes

Una box es un paquete que contiene un sistema operativo para un provider específico (Virtual Box normalmente). Vagrant replicará esta imagen básica en tu maquina virtual. En el Vagrantfile especificamos que box base queremos utilizar. Esta box será descargada e instalada cuando la utilicemos por primera vez

Host / Guest

La maquina/SO Host es la maquina desde la que iniciamos Vagrant.
La maquina/SO Guest es la maquina virtual que arrancados desde el Host.

Provider

Vendria a ser el target de nuestra instalación. La maquina donde vamos a volcar toda nuestra configuración. En el 99% de los casos será una maquina virtual con VirtualBox aunque vagrant está preparado para utilizar otros providers

Provisioners

Son los métodos que utilizamos para instalar automáticamente software, modificar configuraciones y demas en la maquina virtual cuando la lanzamos.
El método más sencillo es utilizar un script shell como provisioner. Otros sistemas de provisioning que podemos utilizar son Ansible, Chef o Puppet

Enlaces y más

Post Anterior
Post Siguiente

Política de Comentarios de pixelovers

Responsable » Juan Manuel Garrido
Finalidad » Moderación de los comentarios
Legitimación » Tu consentimiento expreso que te será requerido por Disqus.
Destinatarios » Los datos de tus comentarios los guardará Disqus, mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy Shield tal y como recoge su politica de privacidad
Derechos » Desde Disqus, por tanto, podrás acceder, rectificar, limitar y suprimir tus comentarios o tu cuenta
Tienes más detalles acerca del tratamiento de los datos relacionados con los comentarios en nuestra (Política de Privacidad)