具有基于可变字符串值的条件的 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 中关于非特定块命名约定的推荐做法一致。