Итерация по объекту типа в terraform

#terraform #hcl

#terraform #hcl

Вопрос:

У меня есть следующая terraform:

Идея в том, что я могу передавать тома и передавать двоичные данные или данные, и этот модуль будет обрабатывать соответствующим образом.

Однако ему не нравится вложенный цикл. У меня такое чувство, что ему не нравится итерация по объекту.

Когда я запускаю это, я получаю следующую ошибку

 #variable.tf
variable "volumes" {
  type        = map(object({
    data = map(string)
    binary_data = map(string)
  }))
  description = "configmap backed volume"
}
 
 #main.tf
resource "kubernetes_config_map" "volume" {
  for_each = var.volumes

  metadata {
    name = each.key
    namespace = var.namespace
  }

  dynamic "data" {
    for_each = each.value["data"]

    content {
      each.key = each.value
    }
  }

  dynamic "binary_data" {
    for_each = each.value["binary_data"]
    content {
      each.key = each.value
    }
  }
 }

 

Ошибка: требуется определение аргумента или блока

В ../../../terraform-modules/helm_install/main.tf строка 45: здесь требуется аргумент или определение блока. Чтобы задать аргумент, используйте знак равенства «=» для ввода значения аргумента.

Ответ №1:

data и binary_data являются аргументами, а не блоками. динамические блоки применяются только к блокам, а не к аргументам.

Это означает, что вы не можете создать несколько data и binary_data в одном kubernetes_config_map . Вам нужно будет подать for_each заявку на уровне ресурсов:

 resource "kubernetes_config_map" "volume" {

  for_each = var.volumes

  metadata {
    name = each.key
    namespace = var.namespace
  }

  data        = each.value["data"]
  binary_data = each.value["binary_data"]

}
 

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