In a tvfars file I have this:
locals {common = {"my key" = "value"}}
because I want to use the map in multiple places in that file. I read the terraform docs about variables and I cannot find the correct syntax. I tried the following (var1 and 2 are both declared as maps):
With
var1 = "${local.common}"var2 = "${local.common}"
I get
variable "var1" should be type map, got string
With
var1 = locals.commonvar2 = locals.common
I get
invalid value "myfile.auto.tfvars" for flag -var-file-default: Error parsing myfile.auto.tfvars: At 18:15: Unknown token: 18:15 IDENT locals.common
With
var1 = {"${local.common}"}var2 = {"${local.common}"}
which fails without an error message but a print of terraform help and terraform exits.
I verified that everything works fine if I copy/paste the map multiple times:
var1 = {"my key" = "value"}var2 = {"my key" = "value"}
Anyone know correct syntax?
Best Answer
local
blocks,interpolations and expressions that are not constants cannot be used in terraform.tfvars
file.
See github-issue for further dicussion
The way around is to define the variable only once in terraform.tfvars
and make the duplicate variables local in the terraform module file.
Example:
variable.tf
variable var1 {type = "map"}
terraform.tfvars
var1= {"key1" = "value1","key2" = "value2"}
module.tf
locals { var2="${var.var1}" } output show_var2 {value = "${local.var2}"}