В моем Vagrantfile я могу указать URL-адрес окна:
config.vm.box_url = "http://example.com/my-box.pkg"
Согласно более поздней документации , я смогу создать файл JSON, содержащий URL-адреса для разных версий коробки. В документации также сказано, что я могу использовать URL этого файла JSON при запуске vagrant box add
. Я надеялся, что смогу использовать URL этого файла JSON config.vm.box_url
. Тем не менее, это не похоже на работу. Когда я пытаюсь это сделать, он воспринимает это как файл коробки:
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.
Можно ли сказать Vagrant использовать JSON-файл метаданных блока в моем Vagrantfile? Я бы предпочел не использовать Vagrant Cloud.
Ответы:
На сегодняшний день (2016-07-12, vagrant 1.8.4), если вы хотите запустить свой собственный каталог вручную (то есть вручную обновить поля и отредактировать файл metadata.json), но при этом вести себя как следует Как и в реальном каталоге, имейте в виду следующее:
Нет необходимости называть файл «metadata.json». Он может быть назван как угодно, если он содержит ожидаемые значения. Я использую "metadata.json" здесь, чтобы прояснить шаги ниже.
каждый файл metadata.json может содержать только один отдельный блок. Он может иметь несколько версий, и каждая версия может иметь несколько провайдеров (virtualbox, vmware, libvirt). Если вам нужно иметь более одного окна (скажем, «fedora» и «ubuntu»), вам нужны два разных файла метаданных.
Vagrant ожидает, что файл metadata.json будет иметь тип «application / json» (как упоминал выше Николас Хиндс. Если ваш веб-сервер не возвращает его (или возвращает «text / plain»)), vagrant предположит, что это фактический файл коробки и попытаться разобрать его (и с треском провалился).
Исключением является Атлас Hashicorp (который раньше был Vagrant Cloud), поскольку перенаправления ведут вас к контенту, который используется как «text / html». Мое лучшее предположение для этого - то, что это имеет отношение к перенаправлениям (подробнее об этом ниже).
Файл блока не обязательно должен находиться в том же месте, что и файл метаданных. Вы можете разместить файл метаданных на локальном веб-сервере, а в Amazon S3 - нет проблем.
Итак, насколько я понял, я обнаружил, что самый простой способ заставить это работать на веб-сервере, и у меня все еще довольно нормальная функциональность, это сделать это:
На вашем веб-хосте создайте структуру файлов и каталогов, подобную этой:
(этот макет означает, что ваш «metadata.json» для box1 должен иметь URL-адреса, указывающие на что-то вроде « http: // yourhost / boxes / yourname / box1 / box1- $ version1- $ provider.box»)
В вашем .htaccess убедитесь, что для индекса каталога задан «metadata.json». Остальное необязательно, для отрицательного кэша и скрытия фактического содержимого:
В вашей среде экспортируйте VAGRANT_SERVER_URL, указывающий на ваш веб-хост. Обратите внимание, нет косой черты!
Имея это в наличии (и все файлы с правильным содержимым), вы можете пойти и добавить свой ящик напрямую:
Так как «metadata.json» является индексным файлом для каталога box1, он должен перенаправить содержимое прямо на него, vagrant подберет его, интерпретирует метаданные и загрузит соответствующий блок.
источник
После прочтения вашего вопроса, кажется, вы пытаетесь сделать что-то немного отличное от меня, но я думаю, что наша конечная цель та же.
Я не хочу использовать службу Vagrant Cloud для размещения своих базовых блоков, но я хочу иметь возможность распространять среду разработки для моей команды разработчиков и использовать возможности этого
metadata.json
файла для поддержки системы управления версиями для среды разработки, который затем будет доступен моей команде разработчиков, просто используя средства, встроенные в vagrant.На момент написания этой статьи (5/5/2014) бродячая документация действительно редка, предположительно потому, что это относительно новая функция, но я уверен, что тот факт, что VagrantCloud имеет платный уровень, также имеет к этому отношение ,
Чтобы выяснить, как использовать
metadata.json
файл для версии и распространения ящиков, я взглянул на некоторые виртуальные машины, доступные в VagrantCloud. Посмотрев их и прочитав часть бродячего кода, стало довольно легко понять, как достичь моей цели.Создайте
metadata.json
файл для описания вашего базового блока, мой выглядит примерно так:Создав
metadata.json
файл, я загрузил его на локальный сервер, работающий во внутренней сети (vagrant.domain.local/metadata.json
). Как только я это сделал, все, что осталось, это проверить его с помощью vagrant:Вуаля, удаленный хостинг, общий и версионный приватный ящик, который не требует использования Vagrant Cloud.
По мере создания новых версий вашего ящика вы будете упаковывать его и редактировать
metadata.json
файл. Из того, что я могу сказать, вы можете использовать любую схему управления версиями, какую хотите, будь то семантическое управление версиями (1.0.0, 1.0.1 и т. Д.) Или просто целые числа для версий (1, 2, 3 и т. Д.). Когда пользователи вашего ящикаvagrant up
vagrant автоматически проверяют ваш файл metadata.json на наличие новой версии, и предлагают имvagrant box update
обновить окно.Вы также можете пропустить
vagrant box add <metadata.json url>
иvagrant init
биты, определяющие базовую Vagrantfile с именем и коробкой коробки URL, например , так:Вы можете распространять Vagrantfile с этим содержимым, и все пользователи смогут это сделать
vagrant up
. Хотя я не уверен, как это работает, когда обновляются версии.источник
~/.vagrant.d/boxes/<your box name>
. Внутри этой папки находитсяmetadata_url
файл, на который ссылается документация, в котором содержится URL-адрес вашего файла JSON, который определяет ваши версии. Вагрант обрабатывает все это автоматически, поэтому все, что вам нужно сделать, это сделатьvagrant box add <your metadata.json url>
, а простоvagrant init <boxname> && vagrant up
Вагрант сделает все остальноеvagrant box add
необходимости. Если бы я мог установить URL этого JSON-файла в Vagrantfile, это был бы еще один шаг для нового разработчика, который просто присоединился к команде, чтобы начать работу. Это работает для коробок, но я не могу понять, почему это не работает для файла JSON.config.vm.box
AND,config.vm.box_url
гдеbox
находится имя вашего ящика иbox_url
URL вашего файла json.Vagrant требует, чтобы URL-адреса метаданных ящика
application/json
соответствовали типу контента. Полученная ошибка указывает на то, что vagrant интерпретировал ваш URL как обычное поле.Убедитесь, что ваш HTTP-сервер
Content-Type
правильно устанавливает заголовок. Большинство HTTP-серверов будут автоматически устанавливатьContent-Type
заголовок,application/json
если ваш файл имеет расширение.json
источник
Я думаю, вы перепутали их директивы ..
Следующее взято с веб-сайта бродяги:
ФАЙЛ КОРОБКИ
Фактический файл коробки - обязательная часть для Vagrant. Рекомендуется всегда использовать файл метаданных вместе с файлом ящика, но прямые файлы ящика поддерживаются по старым причинам в 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 распаковывает коробки только для последующего использования.Within the archive, Vagrant does expect a single file: "metadata.json".
Это файл JSON, который полностью не связан с вышеуказанным компонентом «метаданных блока».This file must contain at least the "provider" key with the provider the box is for
, Например, если ваш ящик для VirtualBox, metadata.json будет выглядеть так: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.
Итак, я думаю, что ваш формат файла коробки, вероятно, неправильно. Либо он не сжат в рекомендуемом формате, либо вы не включили файл metadata.json в архив
источник
Вы можете попробовать https://github.com/sparkoo/boxitory . Это просто один jar-сервер. Вы указываете на каталог, в котором у вас есть свои бродячие ящики, и он создает совместимый http-интерфейс для бродяги. Тогда вы просто указываете это из своего vagrantfile, и все готово. Вам не нужно вручную обрабатывать json-файлы с описанием ваших ящиков, добавлением новых версий, провайдеров и т. Д. Все это делается для вас бесплатно. Просто добавьте новый файл коробки, и Boxitory мгновенно вернет его по запросу.
источник