Дополнительная карта в виде списка - PullRequest
0 голосов
/ 17 октября 2018

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

Это то, что у меня пока есть:

Я определяю ttl какнеобязательная карта, такая как

variables.tf

... stuff ..
variable "ttl" {
  description = "(Optional) Defines ttl"
  type = "map"
  default = {}
}
... more stuff ...

Затем я назначаю ее для aws_dynamodb_table ресурса

main.tf

resource "aws_dynamodb_table" "default" {
  ... stuff ...
  ttl = "${length(keys(var.ttl)) > 0 ? list(var.ttl) : list()}"
  ... more stuff ...
}

При таком подходе я получаю следующую ошибку:

conditional operator cannot be used with list values in:

${length(keys(var.ttl)) > 0 ? list(var.ttl) : list()}

Разве это невозможно?Это кажется достаточно простым, но я в тупике.

1 Ответ

0 голосов
/ 17 октября 2018

Я не пробовал подход условного оператора для этого.Вместо этого у меня по умолчанию установлено значение false.Это означает, что если пользователь модуля не передает никаких значений для ttl, то он не будет включен.

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

переменные.tf

variable "ttl_configuration" {
type = "map"
 default = {
   "attribute_name" = "TimeToExist"
   "enabled" = false
 }
}

Затем внутри модуля присвойте эту переменную ttl, убедившись, что она будет преобразована в список:

main.tf

resource "aws_dynamodb_table" "default" {
  ... stuff ...
  ttl = ["${var.ttl_configuration}"]
  ... more stuff ...
}

Еще одна проблема, с которой я столкнулся для TTL, - это изменение attribute_name с одного атрибута на другой.Terraform не позволяет вам просто изменить его, поэтому вам нужно установить текущее значение в false, а затем установить его в true для вашего нового.Это также означает, что с моим подходом выше, если вы хотите отключить ttl для таблицы, вы все равно должны передать карту, чтобы установить для правильного имени атрибута значение false.

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