我有对象变量的映射,我正在迭代,这是预期的工作,但我认为我可以做得更好。我现在有的是:
variable "channel_list" {
type = map(object({
channel = string
}))
default = {
"1" = {
channel = "#channel1"
}
}
resource "grafana_contact_point" "contact_point" {
for_each = var.channel_list
name = trim(each.value["channel"], "#")
slack {
...
recipient = each.value["channel"]
username = "xy"
}
}
resource "grafana_notification_policy" "slack_notification_policy" {
group_by = ["..."]
contact_point = grafana_contact_point.contact_point_unmatched.name
policy {
matcher {
label = "x"
match = "=~"
value = ".*"
}
contact_point = var.env == "production" ? "prod" : "non-prod"
group_by = ["..."]
}
正如我所说,它工作得很好,但我有两个环境之间的模块分裂,我想从grafana_notification_policy
资源中的contact_point
中删除静态值。因此,我将变量修改为对象列表:
variable "channel_list" {
type = list(object({
one-name = string
another-name = string
}))
default = [
{
"one-name" = "#channel1",
"another-name" = "#channel2",
}
以及将grafana_notification_policy
中的策略块变为dynamic:
dynamic "policy" {
for_each = var.channel_list
content {
matcher {
label = "x"
match = "=~"
value = ".*"
}
contact_point = lookup(policy.value, "one-name", var.channel_list)
}
}
我不确定的是如何使grafana_contact_point
资源与此一起工作。
有一种更简单的方法可以实现你想要的。您使用的变量可以定义为:
variable "channel_list" {
type = map(string)
default = {
"one-name" = "#channel1",
"another-name" = "#channel2",
}
}
然后,资源可以毫无问题地使用for_each
:
resource "grafana_contact_point" "contact_point" {
for_each = var.channel_list
name = trim(each.value, "#")
slack {
...
recipient = each.value
username = "xy"
}
}