Как вы создаете скалярные массивы / списки в Terraform? - PullRequest
0 голосов
/ 12 февраля 2020

myvar должен быть списком групп безопасности.

variable "myvar" {
  default     = null
}

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

Если он не указан, просто используйте группу безопасности по умолчанию

Это не работает

local {
    test = var.myvar != null ? concat(tolist(data.aws_security_group.data.id), var.myvar) : tolist(data.aws_security_group.data.id)
}

Но это работает:

  aaa = var.myvar != null ? concat(["aaaa"], ["bbbbb","ccccccc"]) : ["aaaa"]

так Как преобразовать строку в скалярный массив / список? похоже, вот что нужно terraform и tolist () не работает

Ответы [ 3 ]

1 голос
/ 12 февраля 2020

Это то, что вы ищете?

value = var.myvar != null ? concat([data.aws_security_group.data.id], var.myvar) : [data.aws_security_group.data.id]
1 голос
/ 12 февраля 2020

Основываясь на данных требованиях, я думаю, что самым простым решением было бы установить значение по умолчанию для переменной [] и вообще избежать необходимости в условных выражениях:

variable "additional_security_group_ids" {
  type    = list(string)
  default = []
}

locals {
  security_group_ids = concat(
    [data.aws_security_group.default.id],
    var.additional_security_group_ids,
  )
}

Объединение пустого списка просто создает тот же список, поэтому, если оставить переменную неустановленной в приведенном выше списке, local.security_group_ids будет содержать только идентификатор группы безопасности по умолчанию.

Установка значения по умолчанию null полезна, когда отсутствие значения для эта переменная полностью отключает какую-либо функцию, или, если нужная вам логика c не может быть удобно выражена через значения по умолчанию, но я всегда рекомендую по возможности указывать значения c по умолчанию, поскольку результат будет легче читать и понять для будущих сопровождающих.

0 голосов
/ 12 февраля 2020

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

local {
    test = var.myvar != null ? flatten(concat(tolist([data.aws_security_group.data.id]), [var.myvar])) : tolist([data.aws_security_group.data.id])
}
...