условие terraform aws_lb_listener_rule - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь перейти с v0.11 на v0.12 terraform, и у меня возникают проблемы с тегом условия.

Это мой ресурс:

resource "aws_lb_listener_rule" "static" {
  listener_arn = var.alb_int_arn
  priority     = index(var.priority_load, count.index)

  action {
    type             = "forward"
    target_group_arn = aws_alb_target_group.alb_target_group.arn
  }

  count = var.count_path

  condition {
    host_header {
      values = index(var.path_to_service, count.index)
    }
  }
}

var.path_to_service это список строк, а var.priority_load это список чисел.

Моя проблема в том, что когда я пытаюсь применить свои файлы terraform, всегда произносят команду та же ошибка:

Недопустимое значение для атрибута "values": требуется набор строк.

Я пытаюсь ввести строку напрямую, и у меня та же ошибка.

Моя IDE (IntelliJ) сказала мне, что у меня есть ошибка в теге условия, когда он проверял код, ошибка сказала:

Блоки отчета с неизвестным типом (первый литерал)

Я сделал тест и изменил тег условия для блока, например:

condition = {
    host_header {
      values = index(var.path_to_service, count.index)
    }
  }

Для терраформирования это ошибка syntacti c, но для моей IDE это правильная конфигурация ... очевидно, не работает

Есть идеи для меня?

1 Ответ

1 голос
/ 09 января 2020

Эта ошибка говорит о том, что этот аргумент values ожидает набор строк, но, очевидно, элементы var.path_to_service не относятся к этому типу.

Вы не поделились определением variable "path_to_service", но для того, чтобы он работал с этой конфигурацией в том виде, в котором он написан, его необходимо объявить примерно так:

variable "path_to_service" {
  type = list(set(string))
}

... и значение, назначенное ему вызывающим модулем, должно быть вложено так:

  path_to_service = [
    ["a", "b"],
    ["c"],
  ]

Поскольку ваша переменная имеет единственное имя, я думаю, что более вероятно, что это список отдельных строк, по одной на «службу»:

variable "path_to_service" {
  type = list(string)
}
path_to_service = [
  "a",
  "b",
  "c",
]

Если это так, то вам нужно заключить эти отдельные строки в набор из одного элемента, заключив выражение в скобки [ ]:

  values = [index(var.path_to_service, count.index)]

Пока вы обновляете это для В любом случае, Terraform 0.12, вы также можете переключиться на новый синтаксис индексации списка, который должен достичь того же результата:

  values = [var.path_to_service[count.index]]

Добавление этих скобок списка со значениями примера переменных, которые я привел выше, приведет к появлению Terra Форма, чтобы понять это, как если бы вы написали следующее, используя «a» в качестве примера:

  condition {
    host_header {
      values = ["a"]
    }
  }

..., который, кажется, соответствует типу, ожидаемому этим аргументом values.

...