在 Terraform 中作为具有动态键和值的块的属性
Attributes as Blocks with dynamic key and value in Terraform
我想为 Cloudflare 创建 Terraform 模块,但我坚持使用 cloudflare_zone_settings_override 设置块。我无法根据包含地图的输入变量动态创建它。
目标是让输入变量 settings_override 里面有可变数量的设置。示例:
settings_override = {
always_use_https = "on"
ssl = "flexible"
}
我想要实现的是这样的,我可以在输入上有可变数量的设置(它是模块,所以它可以根据环境变化)。
resource "cloudflare_zone_settings_override" "this" {
zone_id = cloudflare_zone.this.id
for_each = var.settings_override
settings {
always_use_https = "on"
ssl = "flexible"
}
}
但是我总是收到同样的错误:
Error: Argument or block definition required
on main.tf line 72, in resource "cloudflare_zone_settings_override" "this":
72: each.key = each.value
An argument or block definition is required here. To set an argument, use
the equals sign "=" to introduce the argument value.
代码无效。我也尝试过使用 dynamic
的方法,但是 settings 块只能是一个,所以我认为这不是正确的方法...
variable "settings_override" {
description = "Override Cloudflare configuration"
type = map(string)
default = {}
}
resource "cloudflare_zone_settings_override" "this" {
zone_id = cloudflare_zone.this.id
for_each = var.settings_override
settings {
each.key = each.value
}
}
这甚至可以使用 Terraform 吗?或者我必须指定所有可能的选项并使用 for_each?
替换它们
Terraform version v1.0.6
Cloudflare provider version: 2.10.1
您必须明确提供所有选项。例如:
resource "cloudflare_zone_settings_override" "this" {
zone_id = cloudflare_zone.this.id
settings {
always_use_https = lookup(var.settings_override, "always_use_https", null)
ssl = lookup(var.settings_override, "ssl", null)
mirage = lookup(var.settings_override, "mirage", null)
# ... and so on
}
}
我想为 Cloudflare 创建 Terraform 模块,但我坚持使用 cloudflare_zone_settings_override 设置块。我无法根据包含地图的输入变量动态创建它。
目标是让输入变量 settings_override 里面有可变数量的设置。示例:
settings_override = {
always_use_https = "on"
ssl = "flexible"
}
我想要实现的是这样的,我可以在输入上有可变数量的设置(它是模块,所以它可以根据环境变化)。
resource "cloudflare_zone_settings_override" "this" {
zone_id = cloudflare_zone.this.id
for_each = var.settings_override
settings {
always_use_https = "on"
ssl = "flexible"
}
}
但是我总是收到同样的错误:
Error: Argument or block definition required
on main.tf line 72, in resource "cloudflare_zone_settings_override" "this":
72: each.key = each.value
An argument or block definition is required here. To set an argument, use
the equals sign "=" to introduce the argument value.
代码无效。我也尝试过使用 dynamic
的方法,但是 settings 块只能是一个,所以我认为这不是正确的方法...
variable "settings_override" {
description = "Override Cloudflare configuration"
type = map(string)
default = {}
}
resource "cloudflare_zone_settings_override" "this" {
zone_id = cloudflare_zone.this.id
for_each = var.settings_override
settings {
each.key = each.value
}
}
这甚至可以使用 Terraform 吗?或者我必须指定所有可能的选项并使用 for_each?
替换它们Terraform version v1.0.6
Cloudflare provider version: 2.10.1
您必须明确提供所有选项。例如:
resource "cloudflare_zone_settings_override" "this" {
zone_id = cloudflare_zone.this.id
settings {
always_use_https = lookup(var.settings_override, "always_use_https", null)
ssl = lookup(var.settings_override, "ssl", null)
mirage = lookup(var.settings_override, "mirage", null)
# ... and so on
}
}