Dopo aver letto di nuovo la tua domanda, sembra che tu stia cercando di fare qualcosa di leggermente diverso da me, ma penso che il nostro obiettivo finale sia lo stesso.
Non voglio utilizzare il servizio Vagrant Cloud per ospitare i miei box di base, ma voglio essere in grado di distribuire un ambiente di sviluppo al mio team di sviluppo e utilizzare le funzionalità del metadata.json
file per mantenere un sistema di versioning per l'ambiente di sviluppo, che sarà quindi disponibile per il mio team di sviluppo semplicemente usando le strutture integrate nel vagabondo.
La documentazione del vagabondo è davvero scarsa in questo settore al momento della stesura di questo (8/5/2014), presumibilmente perché è una funzionalità relativamente nuova ma sono sicuro che il fatto che VagrantCloud abbia un livello a pagamento ha qualcosa a che fare con esso .
Per capire come utilizzare il metadata.json
file nella versione e distribuire le scatole, ho dato un'occhiata ad alcune delle VM disponibili su VagrantCloud. Dopo aver esaminato quelli e letto alcuni dei codici vagabondi, è diventato abbastanza facile capire come raggiungere il mio obiettivo.
- Imballa la scatola come faresti normalmente. Nel mio caso, sto impacchettando solo per la scatola virtuale, perché è quello che i nostri sviluppatori useranno per eseguire il Vm. Pacco anche un Vagrantfile con la mia basebox che esegue il provisioning per l'ambiente di sviluppo (impostazione delle condivisioni su cartelle appropriate, alcune configurazioni di base di Apache, registrazione degli errori, ecc.)
Crea un metadata.json
file per descrivere la tua casella di base, la mia è simile a questa:
{
"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 volta creato il mio metadata.json
file, l'ho caricato su un server locale in esecuzione sulla nostra rete interna ( vagrant.domain.local/metadata.json
). Una volta che l'ho fatto, tutto ciò che mi restava era di provarlo con il vagabondo:
# 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, un box privato ospitato in remoto, condiviso e con versione, che non richiede l'utilizzo di Vagrant Cloud.
Mentre crei nuove versioni della tua scatola, la impacchetterai e modificherai il metadata.json
file. Da quello che posso dire, puoi usare qualsiasi schema di versioning tu voglia sia che si tratti di versioning semantico (1.0.0, 1.0.1, ecc.) O solo numeri interi semplici per le versioni (1, 2, 3, ecc.). Quando gli utenti del tuo box vagrant up
vagrant controlla automaticamente il tuo file metadata.json per una nuova versione, e chiederà loro di fare vagrant box update
per aggiornare il box.
Puoi anche saltare i bit vagrant box add <metadata.json url>
e vagrant init
definendo un Vagrantfile di base con il nome della casella e l'URL della casella, in questo modo:
# -*- 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
È possibile distribuire un file Vagrant con tali contenuti e tutti gli utenti sarebbero in grado di farlo vagrant up
. Tuttavia, non sono sicuro di come funzioni quando le versioni vengono aggiornate.