W moim pliku Vagrant mogę określić adres URL pudełka:
config.vm.box_url = "http://example.com/my-box.pkg"
Zgodnie z najnowszą dokumentacją powinienem być w stanie utworzyć plik JSON, który zawiera adresy URL dla różnych wersji pudełka. Dokumentacja mówi również, że mogę używać adresu URL tego pliku JSON podczas działania vagrant box add
. Miałem nadzieję, że będę mógł użyć adresu URL tego pliku JSON config.vm.box_url
. To jednak nie działa. Kiedy próbuję, traktuje to jak plik pudełkowy:
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'my-box' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Adding box 'my-box' (v0) for provider: virtualbox
default: Downloading: http://example.com/my-box.pkg.json
default: Progress: 100% (Rate: 876k/s, Estimated time remaining: 0:00:01)
The box failed to unpackage properly. Please verify that the box
file you're trying to add is not corrupted and try again. The
output from attempting to unpackage (if any):
bsdtar.EXE: Unrecognized archive format: Illegal byte sequence
bsdtar.EXE: Error exit delayed from previous errors.
Czy można powiedzieć Vagrantowi, aby używał pliku JSON z metadanymi skrzynki w moim pliku Vagrant? Wolałbym nie używać Vagrant Cloud.
Odpowiedzi:
Na dzień dzisiejszy (2016-07-12, włóczęga 1.8.4), jeśli chcesz uruchomić własny katalog w sposób ręczny (to znaczy ręcznie aktualizować skrzynki i edytować plik metadata.json), ale nadal powinien się zachowywać jak prawdziwy katalog, pamiętaj o następujących rzeczach:
Plik nie musi mieć nazwy „metadata.json”. Można go nazwać dowolną nazwą, o ile zawiera oczekiwane wartości. Używam „metadata.json” tutaj, aby wyjaśnić dalsze kroki poniżej.
każdy plik metadata.json może zawierać tylko jedno pojedyncze pudełko. Może mieć wiele wersji, a każda wersja może mieć wielu dostawców (virtualbox, vmware, libvirt). Jeśli potrzebujesz więcej niż jednego pola (powiedzmy „fedora” i „ubuntu”), potrzebujesz dwóch różnych plików metadanych.
Vagrant oczekuje, że plik metadata.json ma typ „application / json” (jak wspomniano powyżej Nicholas Hinds. Jeśli twój serwer nie zwróci go (lub zwróci „tekst / zwykły”), włóczęga przyjmie, że jest to rzeczywisty plik skrzynki i spróbuj go przeanalizować (i ponieść porażkę).
Atlas Hashicorp (wcześniej Vagrant Cloud) stanowi wyjątek od tego, ponieważ przekierowania prowadzą do treści udostępnianych jako „text / html”. Domyślam się, że ma to coś wspólnego z przekierowaniami (więcej na ten temat poniżej).
Plik skrzynki nie musi znajdować się w tym samym miejscu co plik metadanych. Możesz mieć plik metadanych na lokalnym serwerze internetowym i pudełko w Amazon S3, nie ma z tym problemu.
Tak więc, o ile mi się udało, znalazłem najłatwiejszy sposób, aby uruchomić to na serwerze internetowym i nadal mieć całkiem normalną funkcjonalność, to zrobić:
Na swoim hoście utwórz strukturę plików i katalogów podobną do tej:
(ten układ oznacza, że twój „metadata.json” dla box1 będzie musiał mieć adresy URL wskazujące na coś w rodzaju „ http: // twójhost / pola / nazwa / box1 / pole1- $ wersja1- $ dostawca.box”)
Upewnij się, że w pliku .htaccess dla indeksu katalogu ustawiona jest wartość „metadata.json”. Reszta jest opcjonalna, dla negatywnej pamięci podręcznej i ukrywania faktycznej zawartości:
W swoim środowisku wyeksportuj VAGRANT_SERVER_URL, wskazując na swój hosting. Zwróć uwagę na brak ukośnika!
Mając to na miejscu (i wszystkie pliki z prawidłową zawartością), możesz przejść i bezpośrednio dodać swoje pudełko:
Ponieważ „metadata.json” jest plikiem indeksu dla katalogu box1, powinien przekierować zawartość bezpośrednio do niego, włóczęga ją przejmie, zinterpretuje metadane i pobierze odpowiednie pole.
źródło
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.Utwórz
metadata.json
plik, aby opisać swoje pole podstawowe, moje wygląda podobnie do tego: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ą: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.). Gdyvagrant up
włóczęga użytkowników Twojej skrzynki automatycznie sprawdzi, czy plik metadata.json ma nową wersję, i poprosi ich o zrobienievagrant box update
aktualizacji.Możesz także pominąć bity
vagrant box add <metadata.json url>
ivagrant init
, definiując podstawowy plik Vagrantfile z nazwą skrzynki i adresem URL skrzynki, tak jak poniżej: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.źródło
~/.vagrant.d/boxes/<your box name>
. Wewnątrz tego folderu znajduje sięmetadata_url
plik, do którego odwołuje się dokumentacja, który zawiera adres URL pliku JSON, który określa twoje wersje. Vagrant obsługuje to wszystko automatycznie, więc wszystko, co musisz zrobićvagrant box add <your metadata.json url>
, to po prostuvagrant init <boxname> && vagrant up
włóczęga zajmie się resztąvagrant box add
jest konieczne. Gdybym mógł ustawić adres URL tego pliku JSON w pliku Vagrantfile, to jeden krok mniej dla nowego programisty, który dopiero dołącza do zespołu, aby rozpocząć pracę. Działa w przypadku skrzynek, ale nie mogę zrozumieć, dlaczego nie działa w przypadku pliku JSON.config.vm.box
ORAZconfig.vm.box_url
gdziebox
jest nazwa skrzynki ibox_url
adres URL pliku json.Vagrant wymaga, aby adresy URL metadanych w polu były podawane z
application/json
typem treści. Otrzymany błąd wskazuje, że włóczęga zinterpretował adres URL jako zwykłe pole.Upewnij się, że serwer HTTP
Content-Type
odpowiednio ustawia nagłówek. Większość serwerów HTTP automatycznie ustawiContent-Type
nagłówek,application/json
jeśli plik ma rozszerzenie.json
źródło
Myślę, że pomieszaliście ich dyrektywy ...
Poniższe informacje pochodzą z witryny Vagrant:
PLIK BOX
Rzeczywisty plik skrzynki jest wymaganą częścią Vagrant. Zaleca się, aby zawsze używać pliku metadanych obok pliku pudełka, ale bezpośrednie pliki pudełkowe są obsługiwane z powodów starszych w Vagrant.
Box files are compressed using tar, tar.gz, or zip. The contents of the archive can be anything, and is specific to each provider.
Vagrant core sam rozpakowuje pudełka, by użyć ich później.Within the archive, Vagrant does expect a single file: "metadata.json".
Jest to plik JSON, który jest całkowicie niezwiązany z powyższym komponentem „metadanych skrzynki”.This file must contain at least the "provider" key with the provider the box is for
. Na przykład, jeśli twoje pudełko było dla VirtualBox, metadata.json wyglądałby tak:If there is no metadata.json file or the file does not contain valid JSON with at least a "provider" key, then Vagrant will error when adding the box.
Myślę więc, że twój format pliku skrzynki jest prawdopodobnie nieprawidłowy. Albo nie jest skompresowany w zalecanym formacie, albo nie dołączono pliku metadata.json w archiwum
źródło
Możesz spróbować https://github.com/sparkoo/boxitory . To prosty serwer z jednym słoikiem. Wskazujesz go na katalog, w którym masz swoje błądzące pudełka i tworzy kompatybilny interfejs http dla włóczęgów. Następnie po prostu wskazujesz go z pliku włóczęgi i gotowe. Nie musisz ręcznie obsługiwać plików Json opisujących twoje pudełka, dodawania nowych wersji, dostawców itp. Wszystko to odbywa się za darmo. Wystarczy dodać nowy plik skrzynki, a Boxitory natychmiast go zwróci na żądanie.
źródło