Terraform + Helm:在 Terraform 中设置环境变量数组

问题描述 投票:0回答:3

我一直试图从我的 Terraform 代码中设置一组 helm 属性。更准确地说,我想通过 terraform 设置以下值

我的猜测是我需要做这样的事情:

set {
  name = "env"
  value = "{ATL_PROXY_NAME: jira.example.com,ATL_PROXY_PORT: 443,ATL_TOMCAT_SCHEME: https}"
}

但我收到以下错误:

invalid type for io.k8s.api.core.v1.EnvVar: got "string", expected "map"

谢谢!

kubernetes terraform kubernetes-helm
3个回答
0
投票

env
的值类型应该是一个带有键(
name
value
)的对象数组,使用terraform我们可以定义数组元素并一一设置它们的值:

  1. 为索引 x 处的元素设置键
    name
    的值
  2. 为索引 x 处的元素设置键
    value
    的值
set {
  name  = "env[0].name"
  value = "ATL_PROXY_NAME"
}
set {
  name  = "env[0].value"
  value = "jira.example.com"
}
set {
  name  = "env[1].name"
  value = "ATL_PROXY_PORT"
}
set {
  name  = "env[1].value"
  value = "443"
}
set {
  name  = "env[2].name"
  value = "ATL_TOMCAT_SCHEME"
}
set {
  name  = "env[2].value"
  value = "https"
}

0
投票

如果有人需要通过 helm-chart 中的 terrafrom 设置 env 或 ExtraEnv:

data "helm_template" "external_dns" {

  name       = "some-chart"
  chart      = "some-chart"

   ....


  set {
    name  = "env[0].name"
    value = "AWS_DEFAULT_REGION"
  }

  set {
    name  = "env[0].value"
    value = "eu-central-1"
  }
}

这会给你这个 yaml 清单:

env:
  - name = AWS_DEFAULT_REGION
    value = eu-central-1

-2
投票

通过 Helm 行为和 Kubernetes 清单语法交叉引用 helm_release 资源文档,我们期望在 Terraform 中使用

set
类型在资源中构造一个
map
块(正如 Kubernetes 错误消息所确认的那样)。

语法可以像下面这样固定:

set {
  name  = "env"
  value = {"ATL_PROXY_NAME" = "jira.example.com", "ATL_PROXY_PORT" = 443, "ATL_TOMCAT_SCHEME" = "https"}
}

然后 Terraform

map
类型将按预期通过 Helm 输入作为 Kubernetes 清单中
env
键的值传递。

© www.soinside.com 2019 - 2024. All rights reserved.