基于变量的可选块

Edg*_*r.A 17 terraform terraform-provider-azure

我正在为 编写某种包装模块azurerm_storage_account

azurerm_storage_account有可选块

static_website {
  index_document = string
  error_404_document = string
}
Run Code Online (Sandbox Code Playgroud)

我想根据变量设置它,但我不太确定该怎么做?条件运算符实际上不适用于块(例如static_website = var.disable ? null : { .. }

或者块是否以这样的方式工作,如果我设置index_documenterror_404_document,它与完全不设置块null相同?static_website

azurerm@2.x

TF@0.12.x

Mar*_*cin 33

我认为你可以使用动态块来实现这一点。基本上,当disableis时truestatic_website不会创建 no 。否则,static_website将建造一个街区。

例如,修改后的代码可以是:

  dynamic "static_website" {

    for_each = var.disable == true ? toset([]) : toset([1])

    content {
        index_document = string
        error_404_document = string
    }
  } 
Run Code Online (Sandbox Code Playgroud)

您还可以尝试使用splat来检查是否disable有值或为空:

  dynamic "static_website" {

    for_each = var.disable[*]

    content {
        index_document = string
        error_404_document = string
    }
  } 
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,您可能需要根据var.disable实际值调整条件。