使用Terraform在Kubernetes容器块中创建动态块

问题描述

我想创建一个动态块,该块能够使用terraform为kubernetes内部的docker容器动态创建环境。

我已经尝试创建一个变量列表并遍历环境,但是却出现语法错误

错误:在非计数上下文中引用“计数”

在kubernetes / kubernetes.main.tf第68行中,在资源“ kubernetes_deployment”“ kube_deployment”中:

这是由于使用了超出资源块的计数。

我现在正在寻找创建这样的多个环境

...

      env {
            name = "NAME"
            value = "VALUE"
          }
      env {
        name = "NAME"
        value = "VALUE"
      }
    .
    .
    .
无论如何,

都可以创建此迭代,也可以通过任何技巧在容器块中创建动态环境。我知道动态块仅位于资源,数据,提供程序和预配程序内部。 我以前曾使用头盔进行这种模板制作,但现在我想完全转向地形。 我很乐意为解决此类问题提供指导。

谢谢


resource "kubernetes_deployment" "kube_deployment" {
  Metadata {
    name = var.deployment_name
    labels = {
      App = var.deployment_name
    }
  }

  spec {
    replicas = 1
    selector {
      match_labels = {
        App = var.deployment_name
      }
    }
    template {
      Metadata {
        labels = {
          App = var.deployment_name
        }
      }
      spec {
        container {
          image = var.container_image
          name = var.container_name

          env {
            name = "NAME"
            value = "VALUE"
          }

          port {
            container_port = var.container_port
          }
        }
      }
    }
  }
}

解决方法

即使在类型为资源,数据,提供程序和供应的嵌套块中,实际上也是可能的。

这是工作代码

resource "kubernetes_deployment" "kube_deployment" {
  metadata {
    name = var.deployment_name
    labels = {
      App = var.deployment_name
    }
  }

  spec {
    replicas = 1
    selector {
      match_labels = {
        App = var.deployment_name
      }
    }
    template {
      metadata {
        labels = {
          App = var.deployment_name
        }
      }
      spec {
        container {
          image = var.container_image
          name = var.container_name
          dynamic "env" {
            for_each = var.envs
            content {
              name = env.value.name
              value = env.value.value
            }
          }
          port {
            container_port = var.container_port
          }
        }
      }
    }
  }
}