Packer
The source block
Note: This page is about HCL2 Packer templates. HCL2 templates were first introduced as a beta feature into Packer version 1.5. As of v1.7, HCL2 support is no longer in beta, and is the preferred way to write Packer configuration. For the old-style stable configuration language see template docs. As of v1.6.2, you can convert your legacy JSON template into an HCL2 config file using the hcl2_upgrade command.
The top-level source
block defines reusable builder configuration blocks:
# sources.pkr.hcl
source "happycloud" "foo" {
// ...
}
The first label — happycloud
here — is the builder type. The second label is
the unique name or identifier you want to give to the source. There can be only one
source.happycloud.foo
top-level source block; but it can be used more than
once. Builders are usually found in plugins, except for the file
and the
null
builders that will remain in Packer core.
You can start builders by referring to those source blocks from a build
block :
build {
sources = [
# Here Packer will use a default ami_name when saving the image.
"source.happycloud.example",
"source.happycloud.foo",
]
}
The build-level source
block allows to set specific
source fields. Each field must be defined only once and it is currently not
allowed to override a value.
build {
source "source.happycloud.example" {
# Here Packer will use the provided image_name instead of defaulting it.
# Note that fields cannot be overwritten, in other words, you cannot
# set the 'image_name' field in the top-level source block and here at the
# same time
image_name = "build_specific_field"
}
}
Source Variables
It is possible to access the name
and type
of your source
from
provisioners and post-processors:
source "null" "first-example" {
communicator = "none"
}
build {
name = "roles"
source "null.first-example" {
name = "consul"
}
source "null.first-example" {
name = "nomad"
}
source "null.first-example" {
name = "vault"
}
sources = ["null.first-example"]
provisioner "shell-local" {
inline = ["echo ${source.name} and ${source.type}"]
}
}
# This will echo something like:
#
# roles.null.consul: consul and null
# roles.null.nomad: nomad and null
# roles.null.vault: vault and null
# roles.null.first-example: first-example and null
Related
The list of available builders can be found in the builders section.
A list of community builders is available.
Create your own custom builder !