无法动态获取地形列表变量

时间:2019-04-26 04:12:02

标签: terraform

在variables.tf中有一个列表变量“ test”。我正在尝试在我的zone.tf中使用此列表变量。

实际上我不想使用列表索引,我想运行一个循环以动态地从列表变量获取列表的所有值。我怎样才能做到这一点?非常感谢您的帮助。

我尝试在资源资源“ aws_route53_record”内部的test.tf中使用count,但是它创建了多个不需要的记录集,因为我只需要一个包含多个记录的记录集

   resource "aws_route53_record" "test" {
      zone_id = "${data.aws_route53_zone.dns.zone_id}"
      name    = "${lower(var.environment)}xyz"
      type    = "CAA"
      ttl     = 300
      count = "${length(var.test)}"
     records = [
        "0 issue \"${element(var.test, count.index)}\"",
      ]
    }

variables.tf:-

variable "test" {
  type    = "list"
  default = ["godaddy.com", "Namecheap.org"]
}




zone.tf :-

resource "aws_route53_record" "test" {
  zone_id = "${data.aws_route53_zone.dns.zone_id}"
  name    = "${lower(var.environment)}xyz"
  type    = "CAA"
  ttl     = 300
  records = [
    "0 issue \"${var.test[0]}\"",
    "0 issue \"${var.test[1]}\"",
  ]
}

期望获得包含两个记录的一个记录集。

实际:-获得具有两个记录的两个记录集。

1 个答案:

答案 0 :(得分:0)

因此,如果我理解正确,您想将两个记录与您的区域相关联,但是现在使用count时,您将获得两个包含一个记录的区域。

这是因为通过指定县地形,将创建其count属性等于count数量的资源。

从根本上讲,问题是,现在您有了一个列表变量,并试图通过提取列表中的每个元素以将元素逐个放回list属性中,从而将其传递到期望的列表位置。

与其进行额外的工作,不如通过一个简单的解决方案,只需将字符串的其他部分(变量“ 0 issue”)添加到变量的定义中,然后将整个列表对象传递如下,< / p>

variable "test" {
  type    = "list"
  default = ["0 issue godaddy.com", "0 issue Namecheap.org"]
}

zone.tf :-

resource "aws_route53_record" "test" {
  zone_id = "${data.aws_route53_zone.dns.zone_id}"
  name    = "${lower(var.environment)}xyz"
  type    = "CAA"
  ttl     = 300
  records = ["${var.test}"]
}

然后这将传递该属性的列表,terraform将负责列表的编组,解组和处理。我希望这回答了你的问题。