Terraform 动态块,具有基于变量字符串值的条件

Guy*_*ood 6 terraform

仅当字符串 var 是特定的 2 个值(stg 或 prod)时,我才会使用动态块。此代码不起作用:

dynamic "log" {
  for_each = var.environment == "stg" || var.environment == "prod" ? [1] : [0]
    content {
      category  = "AppServiceAntivirusScanAuditLogs"
      enabled   = true
    }
}
Run Code Online (Sandbox Code Playgroud)

所以当环境是“stg”或“prod”时我想要这个块,但当它是其他任何东西时我不想要它。这可以运行,但逻辑不起作用。

我过去使用布尔变量做过类似的事情,这已经有效,但当我肯定可以以某种方式评估这些字符串时,我不愿意添加另一个变量?

还尝试将逻辑移至“enabled =”字段,该字段有效,但由于我遇到的问题的性质,我需要在块级别执行此操作。

Mat*_*ard 10

您的三元条件是正确的,但返回值不正确。当为可选嵌套块编码三元时,“falsey”返回值必须为空。这可以是空集、列表、对象或映射类型。该类型确实需要与您的“真实”返回值一致。在您的情况下,您要返回list“true”值的类型,因此我们需要list为“falsey”值返回一个空类型:

dynamic "log" {
  for_each = var.environment == "stg" || var.environment == "prod" ? [1] : []
  
  content {
    category  = "AppServiceAntivirusScanAuditLogs"
    enabled   = true
  }
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,空值的迭代次数为零,这是“falsey”条件返回的所需行为。作为旁注,我个人的偏好是返回["this"]可选嵌套块三元数的“真实”条件,以与 Terraform 中围绕非特定块命名约定的推荐实践保持一致。