packer-cn/website/source/docs/post-processors/vagrant.html.md

177 lines
6.3 KiB
Markdown
Raw Normal View History

---
2017-06-14 21:04:16 -04:00
description: |
The Packer Vagrant post-processor takes a build and converts the artifact into
a valid Vagrant box, if it can. This lets you use Packer to automatically
2018-10-26 20:02:51 -04:00
create arbitrarily complex Vagrant boxes, and is in fact how the official boxes
distributed by Vagrant are created.
2015-07-22 22:31:00 -04:00
layout: docs
2017-06-14 21:04:16 -04:00
page_title: 'Vagrant - Post-Processors'
sidebar_current: 'docs-post-processors-vagrant-box'
---
# Vagrant Post-Processor
Type: `vagrant`
2018-10-26 20:02:51 -04:00
The Packer Vagrant post-processor takes a build and converts the artifact into
a valid [Vagrant](https://www.vagrantup.com) box, if it can. This lets you use
Packer to automatically create arbitrarily complex Vagrant boxes, and is in
fact how the official boxes distributed by Vagrant are created.
2015-07-22 22:31:00 -04:00
If you've never used a post-processor before, please read the documentation on
2018-10-26 20:02:51 -04:00
[using post-processors](/docs/templates/post-processors.html) in templates.
This knowledge will be expected for the remainder of this document.
2015-07-22 22:31:00 -04:00
Because Vagrant boxes are
2018-10-26 20:02:51 -04:00
[provider-specific](https://docs.vagrantup.com/v2/boxes/format.html), the
Vagrant post-processor is hardcoded to understand how to convert the artifacts
of certain builders into proper boxes for their respective providers.
Currently, the Vagrant post-processor can create boxes for the following
providers.
2017-06-14 21:04:16 -04:00
- AWS
2018-08-09 08:14:14 -04:00
- Azure
2017-06-14 21:04:16 -04:00
- DigitalOcean
- Docker
2017-06-14 21:04:16 -04:00
- Hyper-V
2018-03-06 15:02:19 -05:00
- LXC
2017-06-14 21:04:16 -04:00
- Parallels
- QEMU
- VirtualBox
- VMware
2017-06-14 21:04:16 -04:00
-> **Support for additional providers** is planned. If the Vagrant
2015-07-22 22:31:00 -04:00
post-processor doesn't support creating boxes for a provider you care about,
please help by contributing to Packer and adding support for it.
Please note that if you are using the Vagrant builder, then the Vagrant
post-processor is unnecesary because the output of the Vagrant builder is
already a Vagrant box; using this post-processor with the Vagrant builder will
cause your build to fail.
## Configuration
The simplest way to use the post-processor is to just enable it. No
2015-07-22 22:31:00 -04:00
configuration is required by default. This will mostly do what you expect and
will build functioning boxes for many of the built-in builders of Packer.
2015-07-22 22:31:00 -04:00
However, if you want to configure things a bit more, the post-processor does
expose some configuration options. The available options are listed below, with
more details about certain options in following sections.
- `compression_level` (number) - An integer representing the compression
2015-07-22 23:25:58 -04:00
level to use when creating the Vagrant box. Valid values range from 0 to 9,
with 0 being no compression and 9 being the best compression. By default,
compression is enabled at level 6.
2013-12-19 17:10:28 -05:00
2018-10-26 20:02:51 -04:00
- `include` (array of strings) - Paths to files to include in the Vagrant
box. These files will each be copied into the top level directory of the
Vagrant box (regardless of their paths). They can then be used from the
Vagrantfile.
2013-12-19 17:10:28 -05:00
- `keep_input_artifact` (boolean) - When true, preserve the artifact we use to
create the vagrant box. Defaults to `false`, except when you set a cloud
provider (e.g. aws, azure, google, digitalocean). In these cases deleting
the input artifact would render the vagrant box useless, so we always keep
these artifacts -- even if you specifically set
`"keep_input_artifact":false`
2017-06-14 21:04:16 -04:00
- `output` (string) - The full path to the box file that will be created by
this post-processor. This is a
[template engine](/docs/templates/engine.html). Therefore, you may use user
variables and template functions in this field. The following extra
variables are also avilable in this engine:
* `Provider`: The Vagrant provider the box is for
* `ArtifactId`: The ID of the input artifact.
* `BuildName`: The name of the build.
By default, the value of this config is
`packer_{{.BuildName}}_{{.Provider}}.box`.
2017-06-14 21:04:16 -04:00
- `vagrantfile_template` (string) - Path to a template to use for the
2015-07-22 23:25:58 -04:00
Vagrantfile that is packaged with the box.
2013-12-19 17:44:15 -05:00
- `vagrantfile_template_generated` (boolean) - By default, Packer will
exit with an error if the file specified using the
`vagrantfile_template` variable is not found. However, under certain
circumstances, it may be desirable to dynamically generate the
Vagrantfile during the course of the build. Setting this variable to
`true` skips the start up check and allows the user to script the
creation of the Vagrantfile at some previous point in the build.
Defaults to `false`.
2013-12-19 17:44:15 -05:00
## Provider-Specific Overrides
2015-07-22 22:31:00 -04:00
If you have a Packer template with multiple builder types within it, you may
want to configure the box creation for each type a little differently. For
example, the contents of the Vagrantfile for a Vagrant box for AWS might be
different from the contents of the Vagrantfile you want for VMware. The
post-processor lets you do this.
2013-12-19 17:44:15 -05:00
Specify overrides within the `override` configuration by provider name:
```json
2013-12-19 17:44:15 -05:00
{
"type": "vagrant",
"compression_level": 1,
"override": {
"vmware": {
"compression_level": 0
2013-12-19 17:44:15 -05:00
}
}
2013-12-19 17:44:15 -05:00
}
```
2015-07-22 22:31:00 -04:00
In the example above, the compression level will be set to 1 except for VMware,
where it will be set to 0.
2013-12-19 17:44:15 -05:00
2018-03-06 15:02:19 -05:00
The available provider names are:
2018-10-26 20:02:51 -04:00
- `aws`
- `azure`
- `digitalocean`
- `google`
- `hyperv`
- `parallels`
- `libvirt`
- `lxc`
- `scaleway`
- `virtualbox`
- `vmware`
- `docker`
## Input Artifacts
2015-07-22 22:31:00 -04:00
By default, Packer will delete the original input artifact, assuming you only
2018-10-26 20:02:51 -04:00
want the final Vagrant box as the result. If you wish to keep the input
artifact (the raw virtual machine, for example), then you must configure Packer
to keep it.
2015-07-22 22:31:00 -04:00
Please see the [documentation on input
artifacts](/docs/templates/post-processors.html#toc_2) for more information.
### Docker
2018-07-19 21:41:26 -04:00
Using a Docker input artifact will include a reference to the image in the
`Vagrantfile`. If the image tag is not specified in the post-processor, the
sha256 hash will be used.
2018-07-17 16:10:53 -04:00
2018-07-19 21:41:26 -04:00
The following Docker input artifacts are supported:
2018-10-26 20:02:51 -04:00
- `docker` builder with `commit: true`, always uses the sha256 hash
- `docker-import`
- `docker-tag`
- `docker-push`
### QEMU/libvirt
2019-01-11 17:06:15 -05:00
The `libvirt` provider supports QEMU artifacts built using any these
accelerators: none, kvm, tcg, or hvf.
### VMWare
If you are using the Vagrant post-processor with the `vmware-esxi` builder, you
must export the builder artifact locally; the Vagrant post-processor will
not work on remote artifacts.