在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是您目前唯一的工具