После прочтения вашего вопроса, кажется, вы пытаетесь сделать что-то немного отличное от меня, но я думаю, что наша конечная цель та же.
Я не хочу использовать службу 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
bit, определив базовый 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
Хотя я не уверен, как это работает, когда обновляются версии.