Merge pull request #3618 from aspiers/box-format-doc-improvements
website/docs: box format doc improvements
This commit is contained in:
commit
2f125ef8c8
|
@ -10,26 +10,66 @@ of VirtualBox exports. With Vagrant supporting multiple
|
||||||
[providers](/v2/providers/index.html) and [versioning](/v2/boxes/versioning.html)
|
[providers](/v2/providers/index.html) and [versioning](/v2/boxes/versioning.html)
|
||||||
now, box files are slightly more complicated.
|
now, box files are slightly more complicated.
|
||||||
|
|
||||||
Box files made for Vagrant 1.0.x (the VirtualBox export tar files) continue
|
Box files made for Vagrant 1.0.x (the VirtualBox export `tar` files) continue
|
||||||
to work with Vagrant today. When Vagrant encounters one of these old boxes,
|
to work with Vagrant today. When Vagrant encounters one of these old boxes,
|
||||||
it automatically updates it internally to the new format.
|
it automatically updates it internally to the new format.
|
||||||
|
|
||||||
Today, box files are split into two different components:
|
Today, there are two different components:
|
||||||
|
|
||||||
* Box Metadata - This is a JSON document that specifies the name of the box,
|
* Box File - This is a compressed (`tar`, `tar.gz`, `zip`) file that is specific
|
||||||
a description, available versions, available providers, and URLs to the
|
|
||||||
actual box files (next component) for each provider and version. If this
|
|
||||||
metadata doesn't exist, a box file can still be added directly, but it
|
|
||||||
will not support versioning and updating.
|
|
||||||
|
|
||||||
* Box File - This is a compressed (tar, tar.gz, zip) file that is specific
|
|
||||||
to a single provider and can contain anything. Vagrant core doesn't ever
|
to a single provider and can contain anything. Vagrant core doesn't ever
|
||||||
use the contents of this file. Instead, they are passed to the provider.
|
use the contents of this file. Instead, they are passed to the provider.
|
||||||
Therefore, a VirtualBox box file has different contents from a VMware
|
Therefore, a VirtualBox box file has different contents from a VMware
|
||||||
box file and so on.
|
box file and so on.
|
||||||
|
|
||||||
|
* Box Catalog Metadata - This is a JSON document (typically exchanged
|
||||||
|
during interactions with [Vagrant Cloud](https://vagrantcloud.com))
|
||||||
|
that specifies the name of the box, a description, available
|
||||||
|
versions, available providers, and URLs to the actual box files
|
||||||
|
(next component) for each provider and version. If this catalog
|
||||||
|
metadata doesn't exist, a box file can still be added directly, but
|
||||||
|
it will not support versioning and updating.
|
||||||
|
|
||||||
Each component is covered in more detail below.
|
Each component is covered in more detail below.
|
||||||
|
|
||||||
|
## Box File
|
||||||
|
|
||||||
|
The actual box file is the required portion for Vagrant. It is recommended
|
||||||
|
you always use a metadata file alongside a box file, but direct box files
|
||||||
|
are supported for legacy reasons in 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](/v2/providers/index.html). Vagrant core itself only unpacks
|
||||||
|
the boxes for use later.
|
||||||
|
|
||||||
|
Within the archive, Vagrant does expect a single file:
|
||||||
|
`metadata.json`. This is a JSON file that is completely unrelated to
|
||||||
|
the above box catalog metadata component; there is only one
|
||||||
|
`metadata.json` per box file (inside the box file), whereas one
|
||||||
|
catalog metadata JSON document can describe multiple versions of the
|
||||||
|
same box, potentially spanning multiple providers.
|
||||||
|
|
||||||
|
`metadata.json` must contain at least the "provider" key with the
|
||||||
|
provider the box is for. Vagrant uses this to verify the provider of
|
||||||
|
the box. For example, if your box was for VirtualBox, the
|
||||||
|
`metadata.json` would look like this:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"provider": "virtualbox"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
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,
|
||||||
|
because it can't verify the provider.
|
||||||
|
|
||||||
|
Other keys/values may be added to the metadata without issue. The value
|
||||||
|
of the metadata file is passed opaquely into Vagrant and plugins can make
|
||||||
|
use of it. At this point, Vagrant core does not use any other keys in this
|
||||||
|
file.
|
||||||
|
|
||||||
## Box Metadata
|
## Box Metadata
|
||||||
|
|
||||||
The metadata is an optional component for a box (but highly recommended)
|
The metadata is an optional component for a box (but highly recommended)
|
||||||
|
@ -64,40 +104,8 @@ It is a JSON document, structured in the following way:
|
||||||
As you can see, the JSON document can describe multiple versions of a box,
|
As you can see, the JSON document can describe multiple versions of a box,
|
||||||
multiple providers, and can add/remove providers in different versions.
|
multiple providers, and can add/remove providers in different versions.
|
||||||
|
|
||||||
This JSON file can be passed directly to `vagrant box add` from the local
|
This JSON file can be passed directly to `vagrant box add` from the
|
||||||
filesystem using a file path or via a URL, and Vagrant
|
local filesystem using a file path or via a URL, and Vagrant will
|
||||||
will install the proper version of the box. If multiple providers are
|
install the proper version of the box. In this case, the value for the
|
||||||
available, Vagrant will ask what provider you want to use.
|
`url` key in the JSON can also be a file path. If multiple providers
|
||||||
|
are available, Vagrant will ask what provider you want to use.
|
||||||
## Box File
|
|
||||||
|
|
||||||
The actual box file is the required portion for Vagrant. It is recommended
|
|
||||||
you always use a metadata file alongside a box file, but direct box files
|
|
||||||
are supported for legacy reasons in 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](/v2/providers/index.html). Vagrant core itself only unpacks
|
|
||||||
the boxes for use later.
|
|
||||||
|
|
||||||
Within the archive, Vagrant does expect a single file: "metadata.json".
|
|
||||||
This is a JSON file that is completely unrelated to the above "box metadata"
|
|
||||||
component. This file must contain at least the "provider" key with the
|
|
||||||
provider the box is for. Vagrant uses this to verify the provider of the
|
|
||||||
box. For example, if your box was for VirtualBox,
|
|
||||||
the metadata.json would look like this:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"provider": "virtualbox"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
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,
|
|
||||||
because it can't verify the provider.
|
|
||||||
|
|
||||||
Other keys/values may be added to the metadata without issue. The value
|
|
||||||
of the metadata file is passed opaquely into Vagrant and plugins can make
|
|
||||||
use of it. At this point, Vagrant core does not use any other keys in this
|
|
||||||
file.
|
|
||||||
|
|
Loading…
Reference in New Issue