Terraform зацикливается на объекте пользовательских переменных

Что я пытаюсь сделать?

Я хочу создать объект кубернет сервис с помощью terraform, но сделать его пригодным для повторного использования. Поэтому каждый раз, когда появляется новая служба, я могу просто добавлять переменные.

Моя проблема:

Я читал и пробовал разные вещи, но я не уверен, как мне перебирать «аннотации» и «селекторы», которые будут иметь более одной пары значений ключа.

Пример кода

Variables.tf, с помощью которого я хочу построить фактический ресурс терраформирования.

variable "apps" {
  default = {
    "app1" = {
      svc_name  = "app1"
      namespace = "testns"
      annotations = {
        "testannotation" = "ann1"
      }
      selector = {
        app = "podinfo"
        env = "dev"
      }
      ports = {
        name       = "http"
        port       = 80
        protocol   = "TCP"
        targetPort = 8008
      }
    },
    "app2" = {
      svc_name  = "app2"
      namespace = "testns"
      annotations = {
        "testannotation" = "ann1"
      }
      selector = {
        app = "someapp"
        env = "qa"
      }
      ports = {
        name       = "http"
        port       = 8080
        protocol   = "TCP"
        targetPort = 8080
      }
    },
  }
}

Вот main.tf, где я хочу перебрать «аннотации» и «селекторы» переменных, потому что их может быть больше одной. НО есть только один блок "аннотации" и "селектор". Поэтому я не мог использовать «динамический», так как он будет генерировать многие из этих блоков.

resource "kubernetes_service" "service" {
  for_each = var.apps
  metadata {
    name      = each.value.svc_name
    namespace = each.value.namespace
    # annotations = {
    #   HOW DO I GET THE ANNOTATIONS HERE
    # }
  }
  spec {
    selector = {
      ## HOW DO I GET THE SELECTORS FROM VARIABLEES HERE
    }
    session_affinity = "ClientIP"
    port {
      port        = each.value.ports.port
      target_port = each.value.ports.targetPort
    }

    type = "ClusterIP"
  }
}

Я был бы признателен за любое руководство, ссылки или предложения здесь!

Что не так с кодом? Есть ошибки?

Marcin 05.05.2022 04:51

спасибо @Marcin, это прокомментированная часть в main.tf с «аннотациями»

Nish 05.05.2022 08:27

Я тоже не вижу здесь никаких проблем. Мне было бы любопытно, какие проблемы вы предвидите или испытали.

theherk 05.05.2022 12:13
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
3
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы делаете то же самое, что и с другими свойствами:

resource "kubernetes_service" "service" {
  for_each = var.apps
  metadata {
    name      = each.value.svc_name
    namespace = each.value.namespace
    annotations = each.value.annotations 
  }
  spec {
    selector = each.value.selector 
    session_affinity = "ClientIP"
    port {
      port        = each.value.ports.port
      target_port = each.value.ports.targetPort
    }

    type = "ClusterIP"
  }
}

Другие вопросы по теме