Formatting a Packer Template in HCL2

30 minutes
  • 3 Learning Objectives

About this Hands-on Lab

Packer allows us to create templates for generating cross-platform machine images, and HashiCorp provides its own configuration language for this task. In this lab, we’ll test our HCL2 skills by fixing and otherwise neaten up an inaccurately written HCL2 Packer template. Just want to test your HCL2 reviewing skills? No Packer knowledge is needed to take this lab.

Learning Objectives

Successfully complete this lab by achieving the following learning objectives:

Fix Whitespace
  1. Open the provided template:

    cd packer
    vim ami-test.pkr.hcl
  2. To make viewing the template easier, let’s neaten up the template by adjusting the tabs/whitespace:

    source "amazon-ebs" "ubuntu-ami-test": {
        access_key = "",
        secret_key = "",
        security_group_ids = [""],
        subnet_id = "",
        region = "us-east-1",
        ami_name = "ubuntu-ami-test_{{timestamp}}",
        instance_type = "t2.micro",
        source_ami = "ami-068663a3c619dd892",
        communicator = "ssh",
        ssh_username = "ubuntu"
    }
    
    build {
        sources = [ "source.amazon-ebs.ubuntu-ami-test" ]
    
        provisioner "shell" [
            script = "init.sh"
        ]
    }
Adjust Structural Errors
  1. Update the template to remove the unnecessary colon (:) in the initial source block. The provisioner block also needs to be updated to work as an object not an array:

    source "amazon-ebs" "ubuntu-ami-test" {
        access_key = "",
        secret_key = "",
        security_group_ids = [""],
        subnet_id = "",
        region = "us-east-1",
        ami_name = "ubuntu-ami-test_{{timestamp}}",
        instance_type = "t2.micro",
        source_ami = "ami-068663a3c619dd892",
        communicator = "ssh",
        ssh_username = "ubuntu"
    }
    
    build {
        sources = [ "source.amazon-ebs.ubuntu-ami-test" ]
    
        provisioner "shell" {
            script = "init.sh"
        }
    }
  2. Finally, remove any commas:

    source "amazon-ebs" "ubuntu-ami-test" {
        access_key = ""
        secret_key = ""
        security_group_ids = [""]
        subnet_id = ""
        region = "us-east-1"
        ami_name = "ubuntu-ami-test_{{timestamp}}"
        instance_type = "t2.micro"
        source_ami = "ami-068663a3c619dd892"
        communicator = "ssh"
        ssh_username = "ubuntu"
    }
    
    build {
        sources = [ "source.amazon-ebs.ubuntu-ami-test" ]
    
        provisioner "shell" {
            script = "init.sh"
        }
    }
Run the Build
  1. Using the credentials on the hands-on lab page, update the variables to use the provided access key, secret key, subnet ID, and security group.

  2. Save and exit the file.

  3. Run the build:

    packer build .

Additional Resources

After a series of issues regarding dev/prod environmental parity, your DevOps team has decided to switch to using Packer for generating machine images. Before you start working on the actual templating, however, you and another member of your team need to take the time to actually learn how to write a Packer template. Your coworker, in particular, is having a hard time working with HCL2 and would like you to take a look at their template and correct any errors.

When finished, run packer build . against the template to ensure it works; you will have to update access_key, secret_key, subnet_id, and security_group attributes with the information provided in the hands-on lab.

What are Hands-on Labs

Hands-on Labs are real environments created by industry experts to help you learn. These environments help you gain knowledge and experience, practice without compromising your system, test without risk, destroy without fear, and let you learn from your mistakes. Hands-on Labs: practice your skills before delivering in the real world.

Sign In
Welcome Back!

Psst…this one if you’ve been moved to ACG!

Get Started
Who’s going to be learning?