如何将变量传递给 heml.tf 中的 yaml 文件?

Kat*_*ops 3 android-3.0-honeycomb terraform kubernetes-helm amazon-eks

我有一个用于使用 helm 创建 terraform 资源的文件helm.tf

在这个文件中,我创建了一个蜂窝代理,需要传入一些观察者,所以我使用了一个 yaml 文件进行配置。这是 helm.tf 的片段:

resource "helm_release" "honeycomb" {
  version = "0.11.0"
  depends_on = [module.eks]
  repository = "https://honeycombio.github.io/helm-charts"
  chart = "honeycomb"
  name = "honeycomb"

  values = [
    file("modules/kubernetes/helm/honeycomb.yml")
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是yaml文件

agent:
  watchers:
    - labelSelector: "app=my-app"
      namespace: my-namespace
      dataset: {{$env}}
      parser:
        name: nginx
        dataset: {{$env}}
        options:
          log_format: "blah"
Run Code Online (Sandbox Code Playgroud)

不幸的是,我尝试设置变量的尝试{{$x}}没有奏效,那么我将如何将env变量发送到 yaml 值文件?我在 tf 文件中有可用的变量,但不确定如何在值文件中设置它。

谢谢

Raj*_*pta 6

您可以使用templatefile功能

主文件

resource "helm_release" "honeycomb" {
  version    = "0.11.0"
  depends_on = [module.eks]
  repository = "https://honeycombio.github.io/helm-charts"
  chart      = "honeycomb"
  name       = "honeycomb"

  values = [
    templatefile("modules/kubernetes/helm/honeycomb.yml", { env = "${var.env}" })
  ]
}
Run Code Online (Sandbox Code Playgroud)

蜂窝.yml

agent:
  watchers:
    - labelSelector: "app=my-app"
      namespace: my-namespace
      dataset: "${env}"
      parser:
        name: nginx
        dataset: "${env}"
        options:
          log_format: "blah"
Run Code Online (Sandbox Code Playgroud)

  • `templatefile` 确实是一个很好的方法,但请注意[文档中关于使用 `templatefile` 生成 YAML 的建议](https://www.terraform.io/docs/configuration/functions/templatefile.html#generate-json-或来自模板的 yaml)。如果您在模板内使用“yamlencode”,那么 Terraform 可以保证结果始终是有效的 YAML 语法,即使模板变量需要引用或转义也是如此。 (2认同)