Po ponownym przeczytaniu pytania, wygląda na to, że próbujesz zrobić coś nieco innego niż ja - ale myślę, że nasz cel końcowy jest taki sam.
Nie chcę korzystać z usługi Vagrant Cloud do hostowania moich baz, ale chcę móc rozpowszechniać środowisko programistyczne w moim zespole deweloperów i korzystać z funkcji metadata.json
pliku, aby utrzymać system kontroli wersji dla środowiska programistycznego, które następnie będą dostępne dla mojego zespołu programistów po prostu za pomocą udogodnień wbudowanych w włóczęgę.
Vagrant dokumentacja jest bardzo rzadka w tym obszarze w momencie pisania tego tekstu (8/5/2014), prawdopodobnie dlatego, że jest to stosunkowo nowa funkcja, ale jestem pewien, że fakt, że VagrantCloud ma płatną warstwę, ma z tym coś wspólnego .
Aby dowiedzieć się, jak wykorzystać metadata.json
plik do wersji i dystrybucji skrzynek, przyjrzałem się niektórym maszynom wirtualnym dostępnym na VagrantCloud. Po ich przejrzeniu i przeczytaniu trochę błędnego kodu - dość łatwo było dowiedzieć się, jak osiągnąć mój cel.
- Zapakuj swoje pudełko tak jak zwykle. W moim przypadku pakuję tylko dla wirtualnego pudełka, ponieważ tego właśnie nasi programiści będą używać do uruchomienia Vm. Pakuję też plik Vagrantfile z moim baseboxem, który wykonuje pewne operacje związane ze środowiskiem programistycznym (konfigurowanie udziałów w odpowiednich folderach, podstawowe konfiguracje apache, rejestrowanie błędów itp.)
Utwórz metadata.json
plik, aby opisać swoje pole podstawowe, moje wygląda podobnie do tego:
{
"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"
}]
}]
}
Po utworzeniu metadata.json
pliku przesłałem go na lokalny serwer działający w naszej sieci wewnętrznej ( vagrant.domain.local/metadata.json
). Kiedy to zrobiłem, pozostało mi tylko przetestować to włóczęgą:
# 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, zdalnie hostowana, współdzielona i wersjonowana prywatna skrzynka, która nie wymaga użycia Vagrant Cloud.
Gdy tworzysz nowe wersje swojego pudełka, spakujesz je i edytujesz metadata.json
plik. Z tego, co mogę powiedzieć, możesz użyć dowolnego schematu wersjonowania, czy to wersjonowania semantycznego (1.0.0, 1.0.1, itp.), Czy po prostu prostych liczb całkowitych dla wersji (1, 2, 3 itd.). Gdy vagrant up
włóczęga użytkowników Twojej skrzynki automatycznie sprawdzi, czy plik metadata.json ma nową wersję, i poprosi ich o zrobienie vagrant box update
aktualizacji.
Możesz także pominąć bity vagrant box add <metadata.json url>
i vagrant init
, definiując podstawowy plik Vagrantfile z nazwą skrzynki i adresem URL skrzynki, tak jak poniżej:
# -*- 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
Możesz rozpowszechniać plik Vagrant z tymi treściami, a wszyscy użytkownicy będą w stanie to zrobić vagrant up
. Chociaż nie jestem pewien, jak to działa, gdy wersje są aktualizowane.