【发布时间】:2021-09-06 18:35:37
【问题描述】:
我想为 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 版本 v1.0.6
Cloudflare 提供商版本:2.10.1
【问题讨论】:
-
"这里需要块定义" - 完整的信息是什么?这个“这里”在哪里?也不清楚你想要实现什么。您想要一些从父模块覆盖的默认值?
-
嗨@Marcin,感谢您的评论。我在帖子中包含了完整的错误,所以现在应该更清楚了。我想实现,因为它是覆盖,将设置块传递到模块中。一旦它有两个选项,另一个时间有十个。没有默认值(默认值由 Cloudflare 设置),只有需要覆盖的值。
标签: terraform cloudflare