Невозможно получить переменные списка Terraform динамически - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть список переменных "test" в variables.tf. Я пытаюсь использовать эту переменную списка внутри моего zone.tf.

Я не хочу использовать индексы списка здесь, на самом деле, я хочу запустить цикл для динамического получения всех значений списка из переменной списка. Как я могу сделать это? Любая помощь очень ценится.

Я попытался использовать count в test.tf внутри ресурса ресурса "aws_route53_record", но он создает несколько наборов записей, которые мне не нужны, поскольку мне просто нужен один набор записей с несколькими записями

   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 голосов
/ 26 апреля 2019

поэтому, если я правильно понимаю, вы хотите связать две записи с вашей зоной, но прямо сейчас, когда вы используете счетчик, вы получаете две зоны с одной записью.

Это потому, что при указании графства terraform создастресурс с атрибутом count, равным количеству count.

Основная проблема в том, что сейчас у вас есть переменная списка, и вы пытаетесь передать ее туда, где ожидается список, путем извлечения каждого отдельного элемента списка, чтобы поместить элемент за элементом в атрибут списка.

Вместо того, чтобы выполнять эту дополнительную работу, более простым решением было бы просто добавить дополнительные части строки, часть «0 выпуск» к определению переменной, а затем просто передать весь объект списка, как показанониже

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 позаботится о маршалинге, демаршалинге и обработке списка.Надеюсь, это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...