Sorunuzu tekrar okuduktan sonra, benden farklı bir şey yapmaya çalışıyorsunuz gibi görünüyor - ama bence son hedefimiz aynı.
Temel kutularımı barındırmak için Vagrant Cloud hizmetini kullanmak istemiyorum, ancak geliştirme ekibime bir geliştirme ortamı dağıtabilmek ve geliştirme ortamına yönelik metadata.json
bir sürümleme sistemi sağlamak için dosyanın özelliklerini kullanmak istiyorum , bu da geliştirme ekibim için sadece vagrant içine yerleştirilmiş olan tesisler kullanılarak erişilebilir olacak.
Vagrant dokümantasyonu, bu yazı sırasında bu alanda gerçekten seyrek (8/5/2014), muhtemelen nispeten yeni bir özellik çünkü VagrantCloud'un ücretli bir katmanı olduğu gerçeğinden eminim .
metadata.json
Kutuyu sürüm ve dağıtım için nasıl kullanacağımı anlamak için VagrantCloud'da bulunan bazı VM'lere baktım. Bunları inceledikten ve bazı vagrant kodunu okuduktan sonra - hedefime nasıl ulaşacağımı anlamak oldukça kolay oldu.
- Kutunuzu normal şekilde paketleyin. Benim durumumda, sadece sanal kutu için paketleme yapıyorum, çünkü geliştiricilerimiz Vm'yi çalıştırmak için kullanacaklar. Ayrıca, geliştirme ortamı için bazı provizyonlar yapan uygun bir Vagrantfile paketim var (uygun klasörlere paylaşımlar, bazı temel apache yapılandırmaları, hata günlüğü vb.)
metadata.json
Temel kutunuzu tanımlamak için bir dosya oluşturun , benimki şuna benzer:
{
"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"
}]
}]
}
Dosyamı oluşturduktan sonra metadata.json
, dahili ağımızda ( vagrant.domain.local/metadata.json
) çalışan yerel bir sunucuya yükledim . Bunu yaptıktan sonra, geriye kalan tek şey vagrant ile test etmekti:
# 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
Voila, Vagrant Cloud kullanılmasını gerektirmeyen, uzaktan barındırılan, paylaşılan ve sürümlendirilmiş bir özel kutu.
Kutunuzun yeni sürümlerini oluştururken kutuyu paketlersiniz ve metadata.json
dosyayı düzenlersiniz . Söyleyebileceğim kadarıyla, semantik sürümleme (1.0.0, 1.0.1, vb.) Veya sürümler (1, 2, 3, vb.) Kutu kullanıcılarınız vagrant up
vagrant, metadata.json dosyanızı yeni bir sürüm için otomatik olarak kontrol ettiğinde ve kutuyu vagrant box update
güncellemek için kendilerinden izin isteyecektir .
Ayrıca kutu adı ve kutu url'si ile bir taban Vagrantfile tanımlayarak vagrant box add <metadata.json url>
ve vagrant init
bitlerini atlayabilirsiniz, şöyle:
# -*- 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
Bu içeriklerle bir Vagrant dosyası dağıtabilirsiniz ve tüm kullanıcılar bunu yapabilir vagrant up
. Yine de, sürümler güncellendiğinde bunun nasıl çalıştığından emin değilim.