【问题标题】:Terraform refactoring for azurerm_dns_txt_record use in a module record block模块记录块中 azurerm_dns_txt_record 使用的 Terraform 重构
【发布时间】:2021-06-09 06:42:17
【问题描述】:

我在 terraform 模块中有以下代码:

locals {
  txt_records = flatten(
    [
      for i in var.DnsZones :
      {
          zone_name           = i.ZoneName
          resource_group_name = i.ResourceGroup
          name                = "@"
          ttl                 = i.Ttl
          records             = i.TxtRecords
      }
    ]
  )
}

resource "azurerm_dns_zone" "zone" {
  count               = length(var.DnsZones)
  name                = var.DnsZones[count.index].ZoneName
  resource_group_name = var.DnsZones[count.index].ResourceGroup
}


resource "azurerm_dns_txt_record" "record-txt" {
  count               = length(local.txt_records)
  resource_group_name = local.txt_records[count.index].resource_group_name
  zone_name           = local.txt_records[count.index].zone_name
  ttl                 = local.txt_records[count.index].ttl
  name                = local.txt_records[count.index].name

  record {
    value = local.txt_records[count.index].records[0]
  }
  record {
    value = local.txt_records[count.index].records[1]
  }
  record {
    value = local.txt_records[count.index].records[2]
  }
  record {
    value = local.txt_records[count.index].records[3]
  }
  record {
    value = local.txt_records[count.index].records[4]
  }
  record {
    value = local.txt_records[count.index].records[5]
  }
  record {
    value = local.txt_records[count.index].records[6]
  }

  depends_on = [azurerm_dns_zone.zone]
}

这似乎不是一种非常干净的添加记录块的方法,但我找不到更好的方法。

我试过用这种方式重构它:

resource "azurerm_dns_txt_record" "record-txt" {
  count               = length(local.txt_records)
  resource_group_name = local.txt_records[count.index].resource_group_name
  zone_name           = local.txt_records[count.index].zone_name
  ttl                 = local.txt_records[count.index].ttl
  name                = local.txt_records[count.index].name


  dynamic "record" {
    for_each = local.txt_records[count.index].records
    iterator = i

    content {
      value = i.value
    }
  }

  depends_on = [azurerm_dns_zone.zone]
}

但不幸的是,这会导致我们的 DNS 中只有一条 MX 记录,我们应该在其中插入 7 个项目。似乎每个项目都插入到前一个项目之上。

如您所见,每个记录块都需要在资源中分开:MX record resource

谁能想到一种更好的方式来构建这个 terraform?

【问题讨论】:

    标签: terraform azure-rm terraform-modules


    【解决方案1】:

    您的动态块应该是:

      dynamic "record" {
        for_each = local.txt_records[count.index].records
    
        content {
          value = record.value
        }
      }
    

    不是

      dynamic "record" {
        for_each = local.txt_records[count.index].records
    
        content {
          value = i.value
        }
      }
    

    【讨论】:

    • 谢谢 - 但是,这仍然会导致单个 MX DNS 具有一条记录(最新的一条),而不是单个 MX DNS 条目具有多条记录。我错过了什么?
    • @ossentoo 那么local.txt_records到底是什么?您有任何示例价值要展示吗?
    • 啊 Marcin - 抱歉,我没有刷新门户 :-)。我通过删除并重新运行代码来确保。它现在按预期工作。太好了 - 非常感谢。你有没有机会看看我也发布的这个问题? stackoverflow.com/questions/67886374/…。这个我还是想不通。
    猜你喜欢
    • 2021-12-30
    • 2021-06-26
    • 2018-10-07
    • 2020-12-28
    • 1970-01-01
    • 2021-04-14
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多