【问题标题】:Override variables in Terraform覆盖 Terraform 中的变量
【发布时间】:2020-07-23 00:55:52
【问题描述】:

我最近开始使用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_template),它应该与 abc_template 非常相似,而原始模板中只有几个变量会发生变化。我能做些什么而不是复制这么多代码行?有没有办法继承abc_template,只覆盖相关变量,而不是创建可能与abc_template非常相似的xyz_template

请指教。

【问题讨论】:

  • 在 terraform 中没有继承,当您开始使用模块时,您会意识到复制/粘贴是您目前唯一的工具

标签: terraform


【解决方案1】:

你可以使用地图:

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() 函数覆盖地图中的值。

【讨论】:

    【解决方案2】:

    您可以使用the merge function 混合多个地图中的元素来生成新地图。

    例如:

    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_template 将具有与 local.abc_template 相同的所有元素,除了 d 被覆盖之外,它还将具有元素 xyz

    【讨论】:

      猜你喜欢
      • 2021-05-04
      • 2021-11-20
      • 2019-03-17
      • 2021-06-15
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 2018-09-27
      • 2017-02-25
      相关资源
      最近更新 更多