如何在Terraform资源循环中使用非唯一键来创建唯一资源

阿夫拉兹

我想使用通用模块为域创建每种类型的DNS记录,因此可以通过以下方式对其进行调用:

module "example_com_dns" {
  source = "[PATH_TO_MODULES]/modules/dns"

  domain  = "example.com"

  a_records = {
    "@"    = [SOME IP]
    "www"  = [SOME IP]
    "home" = [SOME IP]
  }

  txt_records = {
    "@"                    = "txt-foobar1"
    "@"                    = "txt-foobar2"
    "mail._domainkey.self" = "foobar"
  }

  mx_entries = {
     "10" = "mail.someprovider.com"
     "20" = "mail2.someprovider.com"
  }

  cname_records {
    "cname-foo" = "cname-bar
  }
}

对于A,CNAME和MX记录,我有一些很好的方法,但是TXT有一个边缘情况,我需要解决。我的模块具有每种类型的记录的资源块,这些资源块通过循环运行。我将粘贴TXT,但它们都是相同的:

resource "digitalocean_record" "this_txt_record" {
  for_each = var.txt_records

  domain = var.domain
  type   = "TXT"
  name   = each.key
  value  = each.value
}

这一切都很好,除了以下事实之外:由于有2条记录的键带有“ @”,因此只创建了最后一条(在上面的示例中为“ txt-foobar2”):


...

  # module.example_com.digitalocean_record.this_txt_record["@"] will be created
  + resource "digitalocean_record" "this_txt_record" {
      + domain = "example.com"
      + fqdn   = (known after apply)
      + id     = (known after apply)
      + name   = "@"
      + ttl    = (known after apply)
      + type   = "TXT"
      + value  = "txt-foobar2"
    }

我希望它同时创建“ txt-foobar1”和“ txt-foobar2”,即使在地图中指定了非唯一键也是如此。

也许这是错误的方式,我只需要找出一个聪明的循环来解析此结构?

  txt_records = [
    { "@" = "foo" },
    { "@" = "bar"},
    { "mail._domainkey.self" = "foobar"}
  ]

如果是这样,我目前也在那儿失败了:)

马辛

已经给出的一种替代方法是使用以下方法:

 variable "txt_records" {
  default = {
       "@" = ["foo", "bar"],
       "mail._domainkey.self" = ["foobar"]
       }
 }

然后,您可以展平txt_records使用:

locals {

  txt_records_flat = merge([
      for key, values in var.txt_records:
        {for value in values: 
           "${key}-${value}" => {"record_name" = key, "record_value" = value}
        }
  ]...)
}

结果local.txt_records_flat是:

{
  "@-bar" = {
    "record_name" = "@"
    "record_value" = "bar"
  }
  "@-foo" = {
    "record_name" = "@"
    "record_value" = "foo"
  }
  "mail._domainkey.self-foobar" = {
    "record_name" = "mail._domainkey.self"
    "record_value" = "foobar"
  }
}

然后使用它:

resource "digitalocean_record" "this_txt_record" {
  for_each = local.txt_records_flat

  domain = var.domain
  type   = "TXT"
  name   = each.value.record_name
  value  = each.value.record_value
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Terraform资源循环中使用非唯一键来创建唯一资源

来自分类Dev

如何在React Native / Redux中使用推送路由为NavigationStateUtils创建唯一键?

来自分类Dev

如何在KeystoneJS中创建唯一键

来自分类Dev

如何在mongoDB中创建复合唯一键

来自分类Dev

如何在Hybris中创建复合唯一键

来自分类Dev

如何使用替换为非唯一键?MySQL的

来自分类Dev

如何在 JavaScript/TypeScript 中创建具有非唯一键的 Map?

来自分类Dev

如何在javascript es6 / 2015中使用已解析对象的唯一键创建地图?

来自分类Dev

如何在角度ng-repeat中使用唯一键过滤对象的对象?

来自分类Dev

在 for 循环中使用条件来创建唯一的面板 ID

来自分类Dev

如何在while循环中创建唯一的ID?

来自分类Dev

在MySQL中使用列组作为唯一键

来自分类Dev

在实体框架中使用可为空的唯一键

来自分类Dev

在视图的查询操作中使用的唯一键

来自分类Dev

如何创建唯一键形式对象NSArray的NSArray?

来自分类Dev

如何在循环中使用匿名方法实例化唯一委托(在C#中)?

来自分类Dev

如何在Boost MultiIndex中找到最常见的非唯一键?

来自分类Dev

从没有主键的表中使用唯一键创建视图

来自分类Dev

如何检查唯一键约束

来自分类Dev

如何使用唯一键约束更新列?

来自分类Dev

如何在分区数据库中保持唯一键的唯一性?

来自分类Dev

Android唯一键

来自分类Dev

MySQL:唯一键

来自分类Dev

唯一键 [定制]

来自分类Dev

为多个参数创建唯一键(缓存键)

来自分类Dev

lodash index通过具有非唯一键

来自分类Dev

具有非空值的唯一键

来自分类Dev

表示Python中的非唯一键/值对

来自分类Dev

在唯一键上增强unordered_multimap循环

Related 相关文章

热门标签

归档