~/Blog

Brandon Rozek

Photo of Brandon Rozek

PhD Student @ RPI, Writer of Tidbits, and Linux Enthusiast

Shared Packer & Terraform Config

Published on

Updated on

Warning: This post has not been modified for over 2 years. For technical posts, make sure that it is still relevant.

You might have noticed from my last two posts on Packer and Terraform that the configuration files are highly similar. In fact, we can trick them into sharing a configuration file!

Shared Configuration

First let’s create a file we’ll call config that contains all our assignments. Here is an example configuration:

base_system_image = "ubuntu-20-04-x64"
region = "nyc3"
size = "512mb"
domain = "example.com"
subdomain = "temp"

# Secrets
do_token = "DO-TOKEN-HERE"
key_name = "KEY-NAME-ON-DO"

Then we’ll create a file named variables.hcl that contains the type definitions

variable "do_token" {
  type = string
}

variable "base_system_image" {
  type = string
}

variable "domain" {
  type = string
}

variable "key_name" {
  type = string
}

variable "subdomain" {
  type = string
}

variable "region" {
  type = string
}

variable "size" {
  type = string
}

Packer

Now to trick Packer into reading the configuration files we need to:

  • map variables.auto.pkrvars.hcl to config
  • map variables.pkr.hcl to variables.hcl

We can do this with symbolic links

ln -s config variables.auto.pkrvars.hcl
ln -s variables.hcl variables.pkr.hcl

Terraform

To trick Terraform into reading the configuration files we need to:

  • map terraform.tfvars to config
  • map variables.tf to variables.hcl

As before, we can do this with symbolic links

ln -s config terraform.tfvars
ln -s variables.hcl variables.tf

Have any questions or want to chat: Reply via Email

Enjoyed this post?

Published a response to this? :