原文地址html
過去,box 只是 VirtualBox 導出的 tar 文件。因爲 Vagrant 如今支持多個 provider 和版本控制,box 文件稍微複雜一些。web
用於 Vagrant 1.0.x 的 Box 文件(VirtualBox 導出的 tar 文件)能夠繼續與新版本的 Vagrant 一塊兒使用。當 Vagrant 遇到舊 box 時,會自動將其更新爲新格式。json
今天,有三個不一樣的組件:ide
vagrant box list -i
時提供關於 box 的額外信息。更多信息參考 這裏。真實的 box 文件是 Vagrant 的必需部分。建議始終在使用 box 文件時使用元數據文件,但因爲歷史遺留問題,在 Vagrant 中能夠直接使用 box 文件。svg
Box 文件使用 tar,tar.gz 或 zip 進行壓縮。文檔中能夠放特定於 provider 的任何東西。Vagrant 核心只會解壓縮 box。url
在文檔中,Vagrant 期待一個文件:metadata.json
。這是一個與上面的 box 目錄元數據組件徹底無關的 JSON 文件; 每一個 box 文件(box 文件內)只有一個metadata.json
,而一個目錄元數據 JSON 文檔能夠描述同一個 box 的多個版本,可能跨越多個 provider。spa
metadata.json
必須至少包含 provider 的「provider」關鍵字。Vagrant 用這個來驗證 box 的 provider。例如,若是 box 是用於 VirtualBox 的,則 metadata.json
將以下所示:插件
{
"provider": "virtualbox" }
若是沒有 metadata.json
文件或文件不包含有效的且至少有一個「provider」鍵的 JSON 文件,則添加該 box 時,Vagrant 將會出錯,由於它沒法驗證 provider。vagrant
其餘的鍵/值對也能夠被添加到元數據。元數據文件的值被不透明地傳遞給 Vagrant,插件也可使用。此時,Vagrant 內核不會在此文件中使用任何其餘鍵。版本控制
元數據是一個 box 的可選組件(但強烈推薦),支持從一個文件進行版本控制、更新、多個 provider 等。
不須要手動建立元數據。若是你有 HashiCorp 的 Vagrant Cloud 帳戶,能夠在那裏建立 box,而 HashiCorp 的 Vagrant Cloud 會自動建立元數據。格式仍然記錄在這裏。
box 元數據是 JSON 文檔,組織以下:
{
"name": "hashicorp/precise64",
"description": "This box contains Ubuntu 12.04 LTS 64-bit.",
"versions": [ { "version": "0.1.0", "providers": [ { "name": "virtualbox", "url": "http://somewhere.com/precise64_010_virtualbox.box", "checksum_type": "sha1", "checksum": "foo" } ] } ] }
如上所示,JSON 文檔能夠描述多個版本的 box,多個 provider,而且能夠添加/刪除不一樣版本的 provider。
這個 JSON 文件可使用本地文件系統的文件路徑或經過 URL 直接傳遞到 vagrant box add
,Vagrant 將安裝正確版本的 box。這種狀況下,JSON 中的 url 鍵值也能夠是文件路徑。若是有多個 provider 可用,Vagrant 會詢問要使用哪一個provider。