Nachdem Sie Ihre Frage noch einmal gelesen haben, scheint es, als würden Sie versuchen, etwas anderes zu tun als ich - aber ich denke, unser Endziel ist dasselbe.
Ich möchte den Vagrant Cloud-Dienst nicht zum Hosten meiner Basisboxen verwenden, aber ich möchte in der Lage sein, eine Entwicklungsumgebung an mein Entwicklerteam zu verteilen und die Funktionen der metadata.json
Datei zu verwenden, um ein Versionsverwaltungssystem für die Entwicklungsumgebung zu verwalten. die dann für mein Entwicklungsteam zur Verfügung stehen, indem sie einfach die in Vagrant eingebauten Einrichtungen nutzen.
Die Dokumentation zu Vagrant ist in diesem Bereich zum Zeitpunkt des Schreibens (05.08.2014) sehr spärlich, vermutlich, weil es sich um eine relativ neue Funktion handelt, aber ich bin mir sicher, dass die Tatsache, dass VagrantCloud eine kostenpflichtige Stufe hat, auch damit zu tun hat .
Um herauszufinden, wie die metadata.json
Datei für die Versionierung und Verteilung von Boxen verwendet werden kann, habe ich mir einige der auf der VagrantCloud verfügbaren VMs angesehen. Nachdem ich diese durchgesehen und einige der bekannten Codes gelesen hatte, war es ziemlich einfach herauszufinden, wie ich mein Ziel erreichen konnte.
- Verpacken Sie Ihre Box wie gewohnt. In meinem Fall verpacke ich nur für eine virtuelle Box, da dies von unseren Entwicklern zum Ausführen des VMs verwendet wird. Ich packe auch eine Vagrant-Datei in meine Basebox, die eine Provisionierung für die Entwicklungsumgebung vornimmt (Einrichten von Freigaben für entsprechende Ordner, einige grundlegende Apache-Konfigurationen, Fehlerprotokollierung usw.).
Erstelle eine metadata.json
Datei, um deine Basisbox zu beschreiben. Meine sieht ungefähr so aus:
{
"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"
}]
}]
}
Nachdem ich meine metadata.json
Datei erstellt habe , habe ich sie auf einen lokalen Server in unserem internen Netzwerk hochgeladen ( vagrant.domain.local/metadata.json
). Nachdem ich das getan hatte, musste ich es nur noch mit Vagabunden testen:
# 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, eine remote gehostete, gemeinsam genutzte und versionierte private Box, für die keine Verwendung der Vagrant Cloud erforderlich ist.
Wenn Sie neue Versionen Ihrer Box erstellen, packen Sie diese zusammen und bearbeiten die metadata.json
Datei. Soweit ich weiß, können Sie jedes beliebige Versionsschema verwenden, sei es die semantische Versionierung (1.0.0, 1.0.1 usw.) oder nur einfache ganze Zahlen für Versionen (1, 2, 3 usw.). Wenn Ihre Boxbenutzer vagrant up
vagrant automatisch Ihre Datei metadata.json auf eine neue Version überprüft und sie auffordert vagrant box update
, die Box zu aktualisieren.
Sie können die vagrant box add <metadata.json url>
und vagrant init
Bits auch überspringen, indem Sie eine Basis-Vagrantdatei mit dem Boxnamen und der Box-URL wie folgt definieren:
# -*- 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
Sie könnten ein Vagrantfile mit diesen Inhalten verteilen, und alle Benutzer könnten es einfach vagrant up
. Ich bin mir jedoch nicht sicher, wie das funktioniert, wenn die Versionen aktualisiert werden.