Получение длины списка с карты Terraform - PullRequest
0 голосов
/ 27 августа 2018

В настоящее время у меня есть эта карта в файле test.tfvars:

ssm = {
    names = ["Terraform-1","Terraform-2","Terraform-3"]
    values = ["tf-1","tf-2","tf-3"]
}

И я хочу сделать следующее:

resource "aws_ssm_parameter" "parameter_store" {
  count = 3
  name = "$${element(var.ssm[names],count.index)}"
  type = "String"
  value = "$${element(var.ssm[values],count.index)}"
}

Но вместо count = 3 я бы хотел, чтобы количество основывалось на длине списка имен из моей карты ssm. Я пробовал это:

"${length(var.ssm[names])}"

Но я получаю ошибку:

Error: aws_ssm_parameter.parameter_store: resource count can't reference variable: names

Может кто-нибудь указать мне правильное направление с решением этой ошибки? Я не слишком уверен, что я делаю неправильно.

1 Ответ

0 голосов
/ 03 сентября 2018

Текущая версия terraform (0.11.x) ведет себя иногда немного странно, когда ей нужно обрабатывать списки, вложенные в карту. Это может быть исправлено в новой версии 0.12.x, но, возможно, есть лучшее решение для этого ...

Почему вы не реструктурируете свою карту следующим образом:

ssm = {
    "Terraform-1" = "tf-1"
    "Terraform-2" = "tf-2"
    "Terraform-3" = "tf-3"
}

Ваш ресурс теперь будет выглядеть так:

resource "aws_ssm_parameter" "parameter_store" {
  count = "${length(var.ssm)}"
  name  = "${keys(var.ssm, count.index)}"
  type  = "String"
  value = "${values(var.ssm, count.index)}"
}
...