Writing Packer Templates

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

External

Internal

Template Structure

HCL Syntax

packer {
}

source {
}

build {
}

Packer Block

The packer{} block contains Packer settings, including the Packer version.

Source Block

The source{} configures a specific builder plugin, which is then invoked by the build block.

Build Block

Template User Variables

https://www.packer.io/docs/templates/user-variables.html

Template Variables

https://www.packer.io/docs/templates/engine.html#template-variables

Template variables are special variables automatically set by Packer at build time. Some builders, provisioners and other components have template variables that are available only for that component. Template variables are recognizable because they're prefixed by a period, such as {{ .Name }}. For example, when using the shell provisioner template variables are available to customize the execute_command parameter used to determine how Packer will run the shell command:

{
    "provisioners": [
        {
            "type": "shell",
            "execute_command": "{{.Vars}} sudo -E -S bash '{{.Path}}'",
            "scripts": [
                "scripts/bootstrap.sh"
            ]
        }
    ]
}

.Vars

The {{ .Vars }} template variable is replaced with the list of environment variables, if configured as environment_vars.

.Path

The {{ .Path }} template variable is replaced with the path of the script to be executed.

.EnvVarFile

Examples

Amazon EBS Template Example

A simple template that produces an Amazon AMI

{
}