Depois de ler sua pergunta novamente, parece que você está tentando fazer algo um pouco diferente do que eu sou - mas acho que nosso objetivo final é o mesmo.
Não quero utilizar o serviço Vagrant Cloud para hospedar minhas caixas de base, mas quero poder distribuir um ambiente de desenvolvimento para minha equipe de desenvolvedores e utilizar os recursos do metadata.json
arquivo para manter um sistema de versão para o ambiente de desenvolvimento, que estará disponível para minha equipe de desenvolvimento simplesmente usando os recursos incorporados ao vagrant.
A documentação vaga é realmente escassa nesta área no momento da redação deste artigo (8/5/2014), presumivelmente porque é um recurso relativamente novo, mas tenho certeza de que o VagrantCloud tem uma camada paga também tem algo a ver com isso. .
Para descobrir como utilizar o metadata.json
arquivo para versão e distribuir caixas, dei uma olhada em algumas das VMs disponíveis no VagrantCloud. Depois de examinar essas informações e ler alguns dos códigos vagantes - tornou-se muito fácil descobrir como realizar meu objetivo.
- Empacote sua caixa como faria normalmente. No meu caso, estou empacotando apenas para caixa virtual, porque é isso que nossos desenvolvedores usarão para executar o Vm. Também empacotei um Vagrantfile com minha caixa de base, que faz alguns provisionamentos para o ambiente de desenvolvimento (configurando compartilhamentos para pastas apropriadas, algumas configurações básicas do apache, registro de erros, etc.)
Crie um metadata.json
arquivo para descrever sua caixa base, a minha é semelhante a esta:
{
"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"
}]
}]
}
Depois de criar meu metadata.json
arquivo, enviei-o para um servidor local em execução em nossa rede interna ( vagrant.domain.local/metadata.json
). Depois que fiz isso, tudo o que restou foi testá-lo com vagrant:
# 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, uma caixa particular hospedada, compartilhada e com versão remota que não requer o uso da Nuvem Vagrant.
À medida que você cria novas versões da sua caixa, empacota e edita o metadata.json
arquivo. Pelo que posso dizer, você pode usar qualquer esquema de versão que desejar, seja versão semântica (1.0.0, 1.0.1, etc) ou apenas números inteiros simples para versões (1, 2, 3, etc.). Quando o vagrant up
vagrant dos usuários da sua caixa verifica automaticamente o arquivo metadata.json em busca de uma nova versão, e solicita que eles façam vagrant box update
a atualização da caixa.
Você também pode pular os bits vagrant box add <metadata.json url>
e vagrant init
, definindo um Vagrantfile base com o nome da caixa e o URL da caixa, da seguinte maneira:
# -*- 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
Você poderia distribuir um arquivo Vagrant com esse conteúdo, e todos os usuários apenas poderiam vagrant up
. No entanto, não tenho certeza de como isso funciona quando as versões são atualizadas.