Terraform 条件参数块

Terraform conditional argument block

我创建了一个模块以便部署以下 azurerm_automation_schedule 资源:

resource "azurerm_automation_schedule" "example" {
  name                    = var.aaname
  resource_group_name     = azurerm_resource_group.example.name
  automation_account_name = azurerm_automation_account.example.name
  frequency               = var.frequency              
  interval                = var.interval
  timezone                = "Australia/Perth"
  start_time              = "2014-04-15T18:00:15+02:00"
  description             = "This is an example schedule"

  monthly_occurrence {
                      day = monthly_occurrence.value.day
                      occurrence = monthly_occurrence.value.occurrence
                  }
 }

monthly_occurrence 块参数的存在必须是有条件的,因为它 只有 时需要频率是“Month” 否则会抛出错误。 有没有办法创建这个 monthly_occurrence 块参数条件?我正在使用 terraform 0.13.5 和 azurerm 2.38.0

我试过 for_each 但我找不到解决方案。有什么办法吗?

您可以使用 dynamic block 使 monthly_occurrence 成为条件。例如:

resource "azurerm_automation_schedule" "example" {
  name                    = var.aaname
  resource_group_name     = azurerm_resource_group.example.name
  automation_account_name = azurerm_automation_account.example.name
  frequency               = var.frequency              
  interval                = var.interval
  timezone                = "Australia/Perth"
  start_time              = "2014-04-15T18:00:15+02:00"
  description             = "This is an example schedule"

  dynamic "monthly_occurrence" {
    for_each = var.frequency == "Month" ? [1] : []
    content {
       day = monthly_occurrence.value.day
       occurrence = monthly_occurrence.value.occurrence
    }
  }
}

您可以将 conditional expressions with dynamic blocks in order to create a conditional dynamic block 与每月发生的次数组合起来。

你会得到这样的东西:

  dynamic "monthly_occurrence" {
    for_each = var.frequency == Month ? 1 : 0
    content {
       day = monthly_occurrence.value.day
       occurrence = monthly_occurrence.value.occurrence
    }
  }