website/content/blog/sharedpackerterraformconfig.md
2020-05-08 23:13:36 -04:00

1.6 KiB

title date draft tags
Shared Packer & Terraform Config 2020-05-08T22:59:30-04:00 false

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