Глеб Гончаров

Сисадмин и девопс из Ульяновска

Приватный репозиторий образов Vagrant

Для запуска виртуальной машины в Vagrant используют публичные образы или собирают собственный с помощью Packer. Компания HashiCorp предлагает использовать сервис Vagrant Cloud для хранения и версионирования этих образов, чтобы распространять обновления в команде разработчиков. Сервис бесплатный, но артефакты публичные и доступны каждому без авторизации.

В корпоративной среде часто требуется размещать ресурсы в закрытой инфраструктуре на подконтрольных серверах. К сожалению, в этом случае нет никакого способа управлять версиями приватных образов. Как следствие, пользователь не узнает об вышедшем обновлении.

Для решения этой проблемы написал vgrepo — простую программу командной строки для управления образами Vagrant. В паре с HTTP-сервером утилита упрощает доставку и обновление образов пользователям. Посмотрите скринкаст с демонстрацией работы:

asciicast

При запуске команд up, reload и resume Vagrant ищет метаданные образа в формате JSON. По ним Vagrant проверяет локальную версию и доступную в каталоге на сервере. Если у пользователя версия старше, чем в каталоге, то будет предложено обновить образ.

vgrepo призван помочь с управлением образов, сняв головную боль по поддержке метаданных. Данные об образах автоматически изменяются при добавлении и удалении их из каталога.

Пользователю достаточно указать ссылку на JSON в переменной config.vm.box_url. Обратите внимание, имя образа в config.vm.box должно совпадать с именем в метаданных:

Vagrant.configure("2") do |config|
  config.vm.box = "centos7-x64"
  config.vm.box_url = "https://vagrant.gongled.me/r/centos7-x64/"
end

На разработку проекта меня вдохновил туториал по развёртке приватного Vagrant Cloud, где подробно описан весь процесс. Если вам нравится проект и вы хотите помочь — присылайте ишьюсы и пул-реквесты на Гитхабе. С удовольствием читаю всё, что мне присылают.