После прочтения вашего вопроса, кажется, вы пытаетесь сделать что-то немного отличное от меня, но я думаю, что наша конечная цель та же.
Я не хочу использовать службу Vagrant Cloud для размещения своих базовых блоков, но я хочу иметь возможность распространять среду разработки для моей команды разработчиков и использовать возможности этого metadata.json
файла для поддержки системы управления версиями для среды разработки, который затем будет доступен моей команде разработчиков, просто используя средства, встроенные в vagrant.
На момент написания этой статьи (5/5/2014) бродячая документация действительно редка, предположительно потому, что это относительно новая функция, но я уверен, что тот факт, что VagrantCloud имеет платный уровень, также имеет к этому отношение ,
Чтобы выяснить, как использовать metadata.json
файл для версии и распространения ящиков, я взглянул на некоторые виртуальные машины, доступные в VagrantCloud. Посмотрев их и прочитав часть бродячего кода, стало довольно легко понять, как достичь моей цели.
- Упакуйте свою коробку, как обычно. В моем случае я упаковываю только для виртуальной коробки, потому что это то, что наши разработчики будут использовать для запуска Vm. Я также упаковываю Vagrantfile в свой базовый ящик, который обеспечивает некоторую подготовку для среды разработки (настройка общих ресурсов для соответствующих папок, некоторые основные настройки Apache, ведение журнала ошибок и т. Д.)
Создайте metadata.json
файл для описания вашего базового блока, мой выглядит примерно так:
{
"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"
}]
}]
}
Создав metadata.json
файл, я загрузил его на локальный сервер, работающий во внутренней сети ( vagrant.domain.local/metadata.json
). Как только я это сделал, все, что осталось, это проверить его с помощью vagrant:
# 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
Вуаля, удаленный хостинг, общий и версионный приватный ящик, который не требует использования 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, например , так:
# -*- 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
Вы можете распространять Vagrantfile с этим содержимым, и все пользователи смогут это сделать vagrant up
. Хотя я не уверен, как это работает, когда обновляются версии.