具有基于可变字符串值的条件的 Terraform 动态块
Terraform Dynamic Block with conditional based on variable string values
仅当字符串 var 是特定的 2 个值(stg 或 prod)时,我才在动态块之后。此代码无效:
dynamic "log" {
for_each = var.environment == "stg" || var.environment == "prod" ? [1] : [0]
content {
category = "AppServiceAntivirusScanAuditLogs"
enabled = true
}
}
所以当环境是“stg”或“prod”时我想要这个块,但当它是其他任何东西时我不想要它。这可以运行,但逻辑不起作用。
我过去使用布尔变量做过类似的事情,这很有效,但我不愿意添加另一个变量,因为我确实可以以某种方式评估这些字符串?
还尝试将逻辑移动到有效的“enabled =”字段,但由于我遇到的问题的性质,我需要在块级别进行。
您的三元条件是正确的,但 return 值不正确。为可选嵌套块编码三元时,“falsey”return 值必须为空。这可以是空集、列表、对象或地图类型。该类型确实需要与您的“真实”return 值一致。在您的情况下,您正在 returning 一个 list
类型作为“truthy”值,所以我们需要 return 一个空的 list
类型作为“falsey”值:
dynamic "log" {
for_each = var.environment == "stg" || var.environment == "prod" ? [1] : []
content {
category = "AppServiceAntivirusScanAuditLogs"
enabled = true
}
}
正如预期的那样,空值的迭代次数为零,这是 return 在“假”条件下的期望行为。作为旁注,我个人的偏好是 return ["this"]
以可选嵌套块三元组为条件的“真实”与 Terraform 中关于非特定块命名约定的推荐做法一致。
仅当字符串 var 是特定的 2 个值(stg 或 prod)时,我才在动态块之后。此代码无效:
dynamic "log" {
for_each = var.environment == "stg" || var.environment == "prod" ? [1] : [0]
content {
category = "AppServiceAntivirusScanAuditLogs"
enabled = true
}
}
所以当环境是“stg”或“prod”时我想要这个块,但当它是其他任何东西时我不想要它。这可以运行,但逻辑不起作用。
我过去使用布尔变量做过类似的事情,这很有效,但我不愿意添加另一个变量,因为我确实可以以某种方式评估这些字符串?
还尝试将逻辑移动到有效的“enabled =”字段,但由于我遇到的问题的性质,我需要在块级别进行。
您的三元条件是正确的,但 return 值不正确。为可选嵌套块编码三元时,“falsey”return 值必须为空。这可以是空集、列表、对象或地图类型。该类型确实需要与您的“真实”return 值一致。在您的情况下,您正在 returning 一个 list
类型作为“truthy”值,所以我们需要 return 一个空的 list
类型作为“falsey”值:
dynamic "log" {
for_each = var.environment == "stg" || var.environment == "prod" ? [1] : []
content {
category = "AppServiceAntivirusScanAuditLogs"
enabled = true
}
}
正如预期的那样,空值的迭代次数为零,这是 return 在“假”条件下的期望行为。作为旁注,我个人的偏好是 return ["this"]
以可选嵌套块三元组为条件的“真实”与 Terraform 中关于非特定块命名约定的推荐做法一致。