Ir al contenido

Development

Versionar tu box de Vagrant

Aprende a versionar correctamente tus boxes de Vagrant con Vagrant Cloud. Esta guía paso a paso recorre todo el proceso, desde la configuración del Vagrantfile hasta la publicación de boxes versionadas, para que mantengas entornos de desarrollo homogéneos en tu equipo y tus proyectos.

5 min de lectura

Introducción

Después de experimentar con el versionado de Vagrant, decidí escribir este tutorial para quienes lo hagan por primera vez. La documentación sobre esta función y sobre cómo usarla es escasa y está dispersa. Si tienes algún comentario para mejorarlo, házmelo saber.

Vagrant

Vagrant es una herramienta para crear entornos de desarrollo completos. Con un flujo de trabajo fácil de usar y centrado en la automatización, Vagrant reduce el tiempo de configuración del entorno de desarrollo, aumenta la paridad entre desarrollo y producción, y convierte la excusa de “en mi máquina funciona” en una reliquia del pasado.

Vagrant Cloud

Vagrant Cloud es un lugar para compartir, descubrir y crear entornos de Vagrant. Actualmente, Vagrant Cloud está en beta.

Usar una box personalizada o existente

Para seguir este tutorial, se recomienda disponer de una box. Puedes usar una box existente o crear una personalizada. Tanto si la creas como si usas una existente, no necesitas hacer nada especial en la box para implementar el versionado.

Para este tutorial usaré una box de Ubuntu que ya he creado con Packer. Puedes encontrar un ejemplo de las plantillas utilizadas en mi proyecto de GitHub, skoblenick/packer-examples.

Añadir una versión al Vagrantfile

Los cambios en la API de Vagrant a partir de Vagrant 1.5.0 han añadido la posibilidad de versionar. Las dos opciones de las que tienes que ocuparte principalmente son:

  1. config.vm.box_version

    La versión de la box que se va a usar. Esta versión debe coincidir con una versión publicada (‘Released’) en Vagrant Cloud

  2. config.vm.box_check_update

    Si es true, Vagrant comprobará si hay actualizaciones de la box configurada cada vez que se ejecute vagrant up

En tu Vagrantfile tendrás algo parecido a esto:

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.require_version ">= 1.5.2"

Vagrant.configure("2") do |config|
  config.vm.box = "skoblenick/precise64"
  config.vm.box_version = "1.0.0"
  config.vm.box_check_update = true

  config.vm.provider "vmware_fusion" do |v, override|
    v.gui = false
  end

end

Si ejecutas Vagrant en este punto, fallará. Vagrant no podrá encontrar “skoblenick/precise64” y, como resultado, obtendrás un error 404 Not Found.

Espacios de nombres de las boxes

Antes de Vagrant 1.5.0, normalmente se hacía referencia a una box mediante una ruta de archivo local o una URL HTTP de la box alojada.

Vagrant 1.5.0 introdujo los espacios de nombres, que siguen un patrón como “<vagrantcloud_user>/<box_name>”. Puedes verlo como un alias que Vagrant convierte en una URL HTTP consultando Vagrant Cloud. Esto no significa que tu box tenga que estar almacenada en Vagrant Cloud. En la mayoría de los casos, lo único que se almacena son los metadatos que definen la box.

Crear una cuenta en vagrantcloud.com

Tendrás que crear una cuenta en Vagrant Cloud. No voy a explicarlo paso a paso, ya que el registro es bastante sencillo. Una vez creada y verificada la cuenta, inicia sesión.

Definir una box en Vagrant Cloud

Como Vagrant Cloud está en beta, los pasos que se describen aquí pueden cambiar en el futuro. Los siguientes pasos crearán una box nueva.

  1. Selecciona “Create Box” en la navegación principal.

  2. Rellena la información general de tu box.

    • En mi caso, llamaré a la box “precise64”.
    • También voy a hacer que esta box sea privada, ya que estará alojada en mi servidor web de desarrollo.
    • Rellena cualquier información adicional que consideres necesaria.
    • Haz clic en el botón “Create box”.
  3. El siguiente paso es definir la versión de tu box.

    • Vagrant recomienda usar Versionado Semántico. Así que indica un número de versión para tu box.
    • Añade una descripción si te apetece.
    • Haz clic en el botón “Create version”.
  4. A continuación, añadimos los proveedores compatibles con la box que estamos definiendo

    • Haz clic en el botón “Create new provider”.
    • Introduce el nombre de tu proveedor. En mi caso uso VMware Fusion, así que introduciré “vmware_desktop”.
    • Haz clic en el botón “URL”.
      El botón URL mostrará un campo para la URL de la box y un botón para añadir el proveedor.
    • Introduce la URL de tu box. En mi caso, introduciré http://localhost/boxes/precise64-1.0.0_vmware.box.
    • Haz clic en el botón “Create provider”.
  5. Se te pedirá que edites la versión. Si crees que debes actualizar lo que has introducido, puedes hacerlo. Lo importante de esta pantalla es el botón verde “Release now”.

    • Haz clic en el botón “Release now”. Esto no hará pública la box, pero cambiará su estado a activo. Así, los usuarios que añadamos como colaboradores podrán empezar a usar la box. Como creadores de la box, no necesitamos añadirnos a nosotros mismos como colaboradores.

Antes de ponernos a descargar la box, recuerda que he hecho mi box privada. Con esta configuración hay un paso adicional: Vagrant debe saber con qué usuario iniciar sesión en Vagrant Cloud.

vagrant login

Si creas una box pública, no necesitas este paso. Sin embargo, si has creado una box privada como hemos hecho arriba, tendrás que ejecutar el siguiente comando en el Terminal desde el que vayas a ejecutar Vagrant.

username$ vagrant login
In a moment we'll ask for your username and password to Vagrant Cloud.
After authenticating, we will store an access token locally. Your
login details will be transmitted over a secure connection, and are
never stored on disk locally.

If you don't have a Vagrant Cloud account, sign up at vagrantcloud.com

Username or Email: user@example.com
Password (will be hidden):
You're now logged in!

vagrant up

Por fin podemos ejecutar vagrant up en el Terminal y nuestra box se descargará, se clonará y se levantará. Como alternativa, podemos limitarnos a añadir la box con vagrant box add skoblenick/precise64.

Compartir