Después de leer su pregunta nuevamente, parece que está tratando de hacer algo un poco diferente a lo que soy yo, pero creo que nuestro objetivo final es el mismo.
No quiero utilizar el servicio Vagrant Cloud para alojar mis cajas base, pero quiero poder distribuir un entorno de desarrollo a mi equipo de desarrollo y utilizar las características de metadata.json
archivo para mantener un sistema de versiones para el entorno de desarrollo, que estará disponible para mi equipo de desarrollo simplemente usando las instalaciones integradas en vagabundo.
La documentación vagabunda es realmente escasa en esta área al momento de escribir este artículo (8/5/2014), presumiblemente porque es una característica relativamente nueva, pero estoy seguro de que el hecho de que VagrantCloud tiene un nivel pago también tiene algo que ver con eso. .
Para descubrir cómo utilizar el metadata.json
archivo para la versión y distribuir cuadros, eché un vistazo a algunas de las máquinas virtuales disponibles en VagrantCloud. Después de revisarlos y leer algunos de los códigos vagabundos, se hizo bastante fácil descubrir cómo lograr mi objetivo.
- Empaquete su caja como lo haría normalmente. En mi caso, estoy empaquetando solo para la caja virtual, porque eso es lo que nuestros desarrolladores usarán para ejecutar el Vm. También empaqueto un Vagrantfile con mi basebox que realiza algunas provisiones para el entorno de desarrollo (configuración de recursos compartidos en las carpetas apropiadas, algunas configuraciones básicas de apache, registro de errores, etc.)
Cree un metadata.json
archivo para describir su cuadro base, el mío se parece a esto:
{
"description": "long box description",
"short_description": "short box description",
"name": "company/developer-environment",
"versions": [{
"version": "1",
"status": "active",
"description_html": "<p>Dev Environment</p>",
"description_markdown": "Dev Environment",
"providers": [{
"name": "virtualbox",
"url": "http:\/\/vagrant.domain.local/dev/company-developer-environment-1.box"
}]
}]
}
Una vez que creé mi metadata.json
archivo, lo cargué en un servidor local que se ejecuta en nuestra red interna ( vagrant.domain.local/metadata.json
). Una vez que hice eso, todo lo que quedaba era probarlo con vagabundo:
# add the box to vagrant using the definition from metadata.json
# (the box is actually downloaded here, so it can take a minute...or 10)
$ vagrant box add http://vagrant.domain.local/dev/metadata.json
# init the box (this creates a .vagrant folder and a Vagrantfile in the cwd with the appropriate box name)
$ vagrant init company/developer-environment
# boot the box
$ vagrant up
Voila, una caja privada remotamente alojada, compartida y versionada que no requiere el uso de Vagrant Cloud.
A medida que crea nuevas versiones de su caja, la empaqueta y edita el metadata.json
archivo. Por lo que puedo decir, puede usar cualquier esquema de versiones que desee, ya sea versiones semánticas (1.0.0, 1.0.1, etc.) o simplemente números enteros simples para las versiones (1, 2, 3, etc.). Cuando los usuarios de su caja vagrant up
vagabundos comprueban automáticamente su archivo metadata.json para una nueva versión, y les pedirá vagrant box update
que actualicen la caja.
También puede omitir los bits vagrant box add <metadata.json url>
y vagrant init
definiendo un Vagrantfile base con el nombre del cuadro y la url del cuadro, así:
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "company/developer-environment"
config.vm.box_url = "https://vagrant.domain.local/dev/metadata.json"
end
Podría distribuir un Vagrantfile con esos contenidos, y todos los usuarios simplemente podrían hacerlo vagrant up
. Sin embargo, no estoy seguro de cómo funciona cuando se actualizan las versiones.