有没有办法使用名称设置 Terraform 资源属性?
我想使用包含地图/对象的地图变量,并想使用循环根据该对象动态设置资源的属性。
基本上可以做类似 helm_release 的设置机制(https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release):
resource "helm_release" "example" {
name = "my-redis-release"
...
set {
name = "cluster.enabled"
value = "true"
}
理想情况下,我想做一些事情,例如将 .yaml 作为映射/对象加载到变量中,然后在循环中的模块中使用该变量来设置资源属性:
var.attributes = { a = 4, d = 2 }
resource "type" "name" {
for_each = var.attributes
..
self[each.key] = each.value
}
我使用的是 terraform 0.14。
答案 0 :(得分:0)
Terraform 无法从其他地方的数据完全动态地生成资源块的参数。
Terraform 语言表达式允许您动态设置特定参数的值,但参数本身必须始终静态设置,因为 Terraform 中的资源对象更像是通用语言中的结构或类,而不是一个字典或地图,您可以在其中自由设置您喜欢的任何键。
最接近您在问题中包含的内容的是一个资源,其中明确列出了参数,但它们的值从变量中分配,如下所示:
resource "type" "name" {
a = var.attributes.a
b = var.attributes.b
}
Terraform 然后将静态验证您指定的所有参数都是资源类型的有效参数,并且您分配给每个参数的表达式符合预期的类型约束。