我需要使用Terraform在Pagerduty中创建升级策略。我想动态创建rule
块,然后在其中创建target
块,并使用rule
中的值。我不确定如何在目标块内进行第二次调用以使其动态化。
我在列表中有一个团队列表。
locals {
teams = [
[data.pagerduty_schedule.ce_ooh_schedule.id, data.pagerduty_schedule.pi_office_hours_schedule.id],
[data.pagerduty_schedule.delivery_managers_schedule.id]
]
}
resource "pagerduty_escalation_policy" "policy" {
name = var.policy_name
num_loops = var.num_loops
teams = [var.policy_teams]
dynamic "rule" {
for_each = local.teams
escalation_delay_in_minutes = var.escalation_delay
dynamic "target" {
for_each = ??????
content {
type = var.target_type
id = ??????
}
}
}
}
???是我不确定的要点。
我需要为列表中的每个项目创建一个规则(因此[team1,team2]和[escalation_team]),然后为那些列表中的每个项目创建一个目标,每个团队都需要一个目标(因此规则1将有两个目标-team1和team2,规则2将有一个目标是escalation_team)。
有什么办法可以解决这个问题吗?
我正在使用TF v0.12.20
这是更新后的配置:
resource "pagerduty_escalation_policy" "policy" {
name = var.policy_name
num_loops = var.num_loops
teams = [var.policy_teams]
dynamic "rule" {
for_each = local.teams
escalation_delay_in_minutes = var.escalation_delay
dynamic "target" {
for_each = rule.value
content {
type = var.target_type
id = target.value
}
}
}
}
编辑:将locals.teams
更改为local.teams
答案 0 :(得分:2)
如果我正确阅读了您的问题,那么我相信您想要以下类似内容
resource "pagerduty_escalation_policy" "policy" {
name = var.policy_name
num_loops = var.num_loops
teams = [var.policy_teams]
dynamic "rule" {
for_each = locals.teams
content {
escalation_delay_in_minutes = var.escalation_delay
dynamic "target" {
for_each = rule.value
content {
type = var.target_type
id = target.value
}
}
}
}
}
请注意以下内容
dynamic
块必须有一个匹配的content
块dynamic
块引入了具有.key
和.value
的新名称,可用于访问正在循环的内容的属性。我实际上不能运行它,所以如果仍然出错,请告诉我,我会进行更新。