A partir de hoje (2016-07-12, vagrant 1.8.4), se você deseja executar seu próprio catálogo de maneira manual (ou seja, atualizar manualmente as caixas e editar o arquivo metadata.json), mas ainda assim se comportar como um catálogo real, lembre-se das seguintes coisas:
-
Não há necessidade de o arquivo ser chamado de "metadata.json". Pode ser nomeado qualquer coisa, contanto que contenha os valores esperados. Estou usando "metadata.json" aqui para esclarecer as etapas abaixo.
-
cada arquivo metadata.json pode conter apenas uma única caixa. Pode ter várias versões e cada versão pode ter vários provedores (virtualbox, vmware, libvirt). Se você precisa ter mais de uma caixa (digamos, "fedora" e "ubuntu"), você precisa de dois arquivos de metadados diferentes.
-
O Vagrant espera que o arquivo metadata.json tenha um tipo de "application / json" (como Nicholas Hinds mencionou acima. Se o seu servidor web não o retorna (ou retorna "text / plain"), vagrant suponha que é um arquivo de caixa real e tente analisá-lo (e falhar miseravelmente).
-
O Atlas do Hashicorp (que costumava ser o Vagrant Cloud) é a exceção, já que os redirecionamentos levam ao conteúdo servido como "text / html". Meu melhor palpite para isso é que tem algo a ver com os redirecionamentos (mais sobre isso abaixo).
-
O arquivo de caixa não precisa estar no mesmo lugar do arquivo de metadados. Você pode ter seu arquivo de metadados em um servidor da Web local e a caixa no Amazon S3, sem problemas com isso.
Então, até onde eu consegui, achei que a maneira mais fácil de fazer isso funcionar em um servidor da web e ainda ter uma funcionalidade normal é fazer isso:
Em seu host da Web, crie uma estrutura de arquivos e diretórios semelhante a esta:
d wwwroot/
d wwwroot/boxes
d wwwroot/boxes/yourname
f wwwroot/boxes/yourname/.htaccess
d wwwroot/boxes/yourname/box1
f wwwroot/boxes/yourname/box1/metadata.json
f wwwroot/boxes/yourname/box1/box1-$version1-$provider.box
f wwwroot/boxes/yourname/box1/box1-$version2-$provider.box
f wwwroot/boxes/yourname/box1/box1-$version2-$otherprovider.box
d wwwroot/boxes/yourname/box2
f wwwroot/boxes/yourname/box2/metadata.json
f wwwroot/boxes/yourname/box2/box2-$version1-$provider.box
(... etc)
(esse layout significa que o seu "metadata.json" para box1 precisará ter seus URLs apontando para algo como " link < /a>$version1-$provider.box ")
No seu .htaccess, certifique-se de que "metadata.json" esteja definido para o índice do diretório. O resto é opcional, para cache negativo e ocultando o conteúdo real:
Header unset Pragma
FileETag None
Header unset ETag
DirectoryIndex metadata.json
IndexIgnore *
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate, private"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
Em seu ambiente, exporte o VAGRANT_SERVER_URL apontando para seu host da web. Note sem barra final!
export VAGRANT_SERVER_URL="http://yourhost/boxes"
Com isso em vigor (e todos os arquivos com o conteúdo correto), você pode adicionar sua caixa diretamente:
vagrant box add yourname/box1
Como "metadata.json" é o arquivo de índice para o diretório box1, ele deve redirecionar o conteúdo diretamente para ele, o vagrant o pegará, interpretará os metadados e baixará a caixa apropriada.