【问题标题】:Create dynamic block in kubernetes container block using terraform使用 terraform 在 Kubernetes 容器块中创建动态块
【发布时间】:2021-01-06 16:42:51
【问题描述】:

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

我已经尝试创建一个列表 var 并遍历 env,但出现语法错误

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

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

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

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

...

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

无论如何都可以创建此迭代或任何技巧来在容器块中创建动态环境。我了解动态块仅在资源、数据、提供者和供应者内部。 我以前使用 helm 来做这种模板,但现在我想完全转向 terraform。 我希望有任何解决此类问题的方法。

谢谢


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
          }
        }
      }
    }
  }
}

【问题讨论】:

  • “无论如何要创建这个迭代或任何黑客来在容器块中创建动态环境” - terraform.io/docs/configuration/expressions.html#dynamic-blocks !?
  • 谢谢上面提到的“。我知道动态块只在资源、数据、提供者和供应者内部”
  • 您在resource 中,您可以开始了。你真的尝试过使用动态块吗?
  • 谢谢。我试过了。我有例外。我坚持我在一个嵌套块内。现在无论如何它都在工作。谢谢

标签: terraform gcloud terraform-provider-gcp infrastructure-as-code


【解决方案1】:

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

这是一个工作代码

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
          }
        }
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2022-01-20
    • 2021-05-11
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多