Di Vagrantfile saya, saya dapat menentukan URL kotak:
config.vm.box_url = "http://example.com/my-box.pkg"
Menurut dokumentasi yang lebih baru , saya harus dapat membuat file JSON yang berisi URL untuk berbagai versi kotak. Dokumentasi juga mengatakan bahwa saya dapat menggunakan URL file JSON ini ketika menjalankan vagrant box add
. Saya berharap dapat menggunakan URL untuk file JSON itu config.vm.box_url
. Namun, itu sepertinya tidak berhasil. Ketika saya mencobanya, itu memperlakukannya seperti file kotak:
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.
Apakah mungkin untuk memberi tahu Vagrant untuk menggunakan file JSON metadata kotak di Vagrantfile saya? Saya lebih suka tidak harus menggunakan Vagrant Cloud.
Jawaban:
Mulai hari ini (2016-07-12, gelandangan 1.8.4), jika Anda ingin menjalankan katalog Anda sendiri dengan cara manual (yaitu, memperbarui kotak secara manual dan mengedit file metadata.json), tetapi masih harus berperilaku seperti katalog yang sebenarnya, ingatlah hal-hal berikut:
File tidak perlu dinamai "metadata.json". Itu bisa dinamai apa saja, asalkan berisi nilai yang diharapkan. Saya menggunakan "metadata.json" di sini untuk memperjelas langkah lebih lanjut di bawah ini.
setiap file metadata.json hanya dapat berisi satu kotak tunggal. Itu dapat memiliki beberapa versi, dan setiap versi dapat memiliki beberapa penyedia (virtualbox, vmware, libvirt). Jika Anda perlu memiliki lebih dari satu kotak (katakanlah, "fedora" dan "ubuntu") Anda perlu dua file metadata yang berbeda.
Vagrant mengharapkan file metadata.json memiliki tipe "application / json" (seperti yang disebutkan oleh Nicholas Hinds di atas. Jika server web Anda tidak mengembalikannya (atau, mengembalikan "teks / polos"), gelandangan akan menganggap itu file kotak aktual , dan mencoba menguraikannya (dan gagal total).
Atlas Hashicorp (yang dulunya adalah Vagrant Cloud) adalah pengecualian untuk ini, karena pengalihan mengarahkan Anda ke konten yang disajikan sebagai "teks / html". Tebakan terbaik saya untuk ini adalah ada hubungannya dengan pengalihan (lebih lanjut tentang ini di bawah).
File kotak tidak harus berada di tempat yang sama dengan file metadata. Anda dapat memiliki file metadata di server web lokal, dan kotak di Amazon S3, tidak ada masalah dengan itu.
Jadi, sejauh yang saya dapat, saya menemukan cara termudah untuk menjalankannya di server web dan masih memiliki fungsi yang cukup normal adalah dengan melakukan ini:
Di hosting Anda, buat struktur file dan direktori yang mirip dengan ini:
(tata letak ini berarti "metadata.json" Anda untuk box1 harus memiliki URL yang mengarah ke sesuatu seperti " http: // yourhost / box / yourname / box1 / box1- $ version1- $ provider.box")
Di .htaccess Anda, pastikan bahwa "metadata.json" disetel untuk indeks Direktori. Sisanya bersifat opsional, untuk cache negatif dan menyembunyikan konten yang sebenarnya:
Di lingkungan Anda, ekspor VAGRANT_SERVER_URL mengarah ke hosting Anda. Perhatikan tidak ada garis miring!
Dengan ini (dan semua file dengan konten yang benar), Anda dapat pergi dan menambahkan kotak Anda secara langsung:
Karena "metadata.json" adalah file indeks untuk direktori box1, itu harus mengarahkan ulang konten ke sana, gelandangan akan mengambilnya, menafsirkan metadata dan mengunduh kotak yang sesuai.
sumber
Setelah membaca pertanyaan Anda lagi, Tampaknya Anda mencoba melakukan sesuatu yang sedikit berbeda dari saya - tetapi saya pikir tujuan akhir kami adalah sama.
Saya tidak ingin memanfaatkan layanan Cloud Vagrant untuk hosting kotak dasar saya, tetapi saya ingin dapat mendistribusikan lingkungan pengembangan ke tim pengembang saya, dan memanfaatkan fitur
metadata.json
file untuk mempertahankan sistem versi untuk lingkungan pengembangan, yang kemudian akan tersedia untuk tim pengembangan saya hanya dengan menggunakan fasilitas yang dibangun menjadi gelandangan.Dokumentasi gelandangan sangat jarang di daerah ini pada saat penulisan ini (8/5/2014), mungkin karena itu fitur yang relatif baru tetapi saya yakin fakta bahwa VagrantCloud memiliki tingkat pembayaran ada hubungannya dengan itu juga .
Untuk mengetahui cara memanfaatkan
metadata.json
file ke versi dan mendistribusikan kotak, saya melihat beberapa VM yang tersedia di VagrantCloud. Setelah melihat semua itu, dan membaca beberapa kode gelandangan - menjadi sangat mudah untuk mengetahui bagaimana mencapai tujuan saya.Buat
metadata.json
file untuk menggambarkan kotak dasar Anda, milik saya terlihat mirip dengan ini:Setelah saya membuat
metadata.json
file saya , saya mengunggahnya ke server lokal yang berjalan di jaringan internal kami (vagrant.domain.local/metadata.json
). Setelah saya melakukan itu, yang tersisa hanyalah mengujinya dengan gelandangan:Voila, kotak pribadi yang di-host, dibagikan, dan versi jauh, yang tidak memerlukan penggunaan Cloud Awan.
Saat Anda membuat versi baru kotak Anda, Anda akan mengemasnya, dan mengedit
metadata.json
file. Dari apa yang saya tahu, Anda dapat menggunakan skema versi apa pun yang Anda inginkan, baik versi semantik (1.0.0, 1.0.1, dll) atau hanya bilangan bulat sederhana untuk versi (1, 2, 3, dll). Ketika pengguna kotak Andavagrant up
gelandangan secara otomatis memeriksa file metadata.json Anda untuk versi baru, dan akan meminta merekavagrant box update
untuk memperbarui kotak itu.Anda juga dapat melewati
vagrant box add <metadata.json url>
andvagrant init
bits dengan mendefinisikan base Vagrantfile dengan nama kotak dan url kotak, seperti:Anda bisa mendistribusikan Vagrantfile dengan konten-konten itu, dan semua pengguna hanya bisa melakukannya
vagrant up
. Meskipun, saya tidak yakin tentang cara kerjanya ketika versi diperbarui.sumber
~/.vagrant.d/boxes/<your box name>
. Di dalam folder itu adametadata_url
file yang direferensikan di sekitar dokumentasi, yang menyimpan URL untuk file JSON Anda yang mendefinisikan versi Anda. Vagrant menangani semua itu secara otomatis, jadi yang harus Anda lakukan adalahvagrant box add <your metadata.json url>
, kemudian hanyavagrant init <boxname> && vagrant up
, gelandangan yang melakukan sisanyavagrant box add
diperlukan. Jika saya bisa mengatur URL file JSON itu di Vagrantfile, itu satu langkah lebih sedikit untuk dev baru yang baru bergabung dengan tim untuk bangkit dan berjalan. Ini berfungsi untuk kotak, tapi saya tidak tahu mengapa itu tidak berfungsi untuk file JSON.config.vm.box
DAN diconfig.vm.box_url
manabox
nama kotak Anda, danbox_url
merupakan URL ke file json Anda.Vagrant mengharuskan URL metadata kotak disajikan dengan
application/json
jenis konten. Kesalahan yang Anda dapatkan menunjukkan bahwa gelandangan telah menafsirkan URL Anda sebagai kotak biasa.Pastikan server HTTP Anda mengatur
Content-Type
header dengan tepat. Sebagian besar server HTTP akan secara otomatis mengaturContent-Type
header keapplication/json
jika file Anda memiliki ekstensi.json
sumber
Saya pikir Anda mendapat arahan mereka dicampur ..
Berikut ini diambil dari situs gelandangan:
KOTAK FILE
File kotak yang sebenarnya adalah bagian yang diperlukan untuk Vagrant. Disarankan Anda selalu menggunakan file metadata bersama file kotak, tetapi file kotak langsung didukung untuk alasan warisan di 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.
Inti gelandangan itu sendiri hanya membongkar kotak untuk digunakan nanti.Within the archive, Vagrant does expect a single file: "metadata.json".
Ini adalah file JSON yang sama sekali tidak terkait dengan komponen "box metadata" di atas.This file must contain at least the "provider" key with the provider the box is for
. Misalnya, jika kotak Anda untuk VirtualBox, metadata.json akan terlihat seperti ini: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.
Jadi, saya pikir format file kotak Anda mungkin salah. Entah itu tidak dikompresi dengan format yang direkomendasikan, atau Anda belum menyertakan file metadata.json dalam arsip
sumber
Anda dapat mencoba https://github.com/sparkoo/boxitory . Ini sederhana satu server jar. Anda arahkan ke direktori di mana Anda memiliki kotak gelandangan Anda dan itu menciptakan antarmuka http yang kompatibel untuk gelandangan. Maka Anda cukup mengarahkannya dari vagrantfile Anda dan Anda selesai. Anda tidak perlu secara manual menangani file json yang menggambarkan kotak Anda, menambahkan versi baru, penyedia, dll. Semuanya dilakukan untuk Anda secara gratis. Cukup tambahkan file kotak baru dan Boxitory langsung mengembalikannya saat diminta.
sumber