Sau khi đọc lại câu hỏi của bạn, có vẻ như bạn đang cố gắng làm điều gì đó khác một chút so với tôi - nhưng tôi nghĩ mục tiêu cuối cùng của chúng tôi là như nhau.
Tôi không muốn sử dụng dịch vụ Vagrant Cloud để lưu trữ các hộp cơ sở của mình, nhưng tôi muốn có thể phân phối môi trường phát triển cho nhóm nhà phát triển của mình và sử dụng các tính năng của metadata.json
tệp để duy trì hệ thống phiên bản cho môi trường phát triển, mà sau đó sẽ có sẵn cho nhóm phát triển của tôi chỉ bằng cách sử dụng các tiện ích được tích hợp sẵn.
Tài liệu mơ hồ thực sự thưa thớt ở khu vực này tại thời điểm viết bài này (8/5/2014), có lẽ vì đó là một tính năng tương đối mới nhưng tôi chắc chắn rằng VagrantCloud có một tầng trả phí cũng có liên quan đến nó .
Để tìm ra cách sử dụng metadata.json
tệp cho phiên bản và phân phối các hộp, tôi đã xem xét một số máy ảo có sẵn trên VagrantCloud. Sau khi xem qua những thứ đó, và đọc một số mã mơ hồ - nó trở nên khá dễ dàng để tìm ra cách thực hiện mục tiêu của tôi.
- Đóng gói hộp của bạn như bình thường. Trong trường hợp của tôi, tôi chỉ đóng gói cho hộp ảo, vì đó là những gì các nhà phát triển của chúng tôi sẽ sử dụng để chạy Vm. Tôi cũng gói Vagrantfile với basebox của mình để cung cấp một số điều khoản cho môi trường phát triển (thiết lập chia sẻ cho các thư mục phù hợp, một số cấu hình apache cơ bản, ghi nhật ký lỗi, v.v.)
Tạo một metadata.json
tệp để mô tả hộp cơ sở của bạn, của tôi trông giống như thế này:
{
"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"
}]
}]
}
Khi tôi tạo metadata.json
tệp của mình , tôi đã tải nó lên một máy chủ cục bộ đang chạy trên mạng nội bộ của chúng tôi ( vagrant.domain.local/metadata.json
). Khi tôi đã làm điều đó, tất cả những gì còn lại là để kiểm tra nó một cách mơ hồ:
# 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, một hộp riêng được lưu trữ, chia sẻ và phiên bản từ xa, không yêu cầu sử dụng Đám mây Vagrant.
Khi bạn tạo các phiên bản mới của hộp, bạn sẽ đóng gói và chỉnh sửa metadata.json
tệp. Từ những gì tôi có thể nói, bạn có thể sử dụng bất kỳ lược đồ phiên bản nào bạn muốn, đó là phiên bản ngữ nghĩa (1.0.0, 1.0.1, v.v.) hoặc chỉ là các số nguyên đơn giản cho các phiên bản (1, 2, 3, v.v.). Khi người dùng hộp của bạn vagrant up
tự động kiểm tra tệp metadata.json của bạn để biết phiên bản mới và sẽ nhắc họ làm gì vagrant box update
để cập nhật hộp.
Bạn cũng có thể bỏ qua các bit vagrant box add <metadata.json url>
và vagrant init
bit bằng cách xác định Vagrantfile cơ sở với tên hộp và url hộp, như vậy:
# -*- 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
Bạn có thể phân phối Vagrantfile với những nội dung đó và tất cả người dùng sẽ có thể vagrant up
. Mặc dù vậy, tôi không chắc về cách thức hoạt động khi các phiên bản được cập nhật.