在Terraform中重写变量

在Terraform中重写变量,terraform,Terraform,我最近开始使用Terraform,我需要一些帮助。我希望它不是太基本。我有以下Terraform数据结构 abc_template = { a = var.a b = var.b c = var.c d = var.d .... .... .... k = var.k

我最近开始使用
Terraform
,我需要一些帮助。我希望它不是太基本。我有以下Terraform数据结构

  abc_template = {
    a            = var.a
    b            = var.b
    c            = var.c
    d            = var.d
    ....
    ....
    ....
    k           = var.k                            
  }
然后我跑:

  resource "local_file" "aaa" {
  count      =  1
  content    = templatefile("${path.module}/templates/abc.tmpl", local.abc_template)
  ....
  ....
}
我需要创建一个新模板(
xyz_模板
),它应该非常类似于
abc_模板
,而只有少数变量将从原始模板更改。除了重复这么多代码行,我还能做什么?是否有方法继承
abc_模板
,只覆盖相关变量,而不是创建可能与
abc_模板
非常相似的
xyz_模板

请告知。

您可以使用地图:

variable "global" {
    type  = "map"
    default = {
        name = "TEST"
        addr = "Test123"
    }
}

output "example" {
  value = templatefile("${path.module}/web.tpl", {
    global = var.global
  })
}
模板:

My name is ${global.name}.
您可以使用merge()函数覆盖贴图中的值。

您可以使用从多个贴图混合元素来生成新贴图

例如:

locals {
  abc_template = {
    a = var.a
    b = var.b
    c = var.c
    d = var.d
  }
  xyz_template = merge(
    local.abc_template,
    {
      d = var.other_d
      x = var.x
      y = var.y
      z = var.z
    },
  )
}

在上面的示例中,
local.xyz_模板
将具有与
local.abc_模板
相同的所有元素,除了被覆盖的
d
,它还将具有元素
x
y
,而且
z

在terraform中没有继承,当您开始使用模块时,您将意识到copy/pasta是您目前唯一的工具