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

Posted

技术标签:

【中文标题】如何将变量传递给 heml.tf 中的 yaml 文件?【英文标题】:How do I pass variables to a yaml file in heml.tf? 【发布时间】:2021-02-18 03:08:05 【问题描述】:

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

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

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")
  ]

这里是yaml文件

agent:
  watchers:
    - labelSelector: "app=my-app"
      namespace: my-namespace
      dataset: $env
      parser:
        name: nginx
        dataset: $env
        options:
          log_format: "blah"

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

谢谢

【问题讨论】:

【参考方案1】:

你可以使用templatefile函数

main.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 = [
    templatefile("modules/kubernetes/helm/honeycomb.yml",  env = "$var.env" )
  ]

honeycomb.yml

agent:
  watchers:
    - labelSelector: "app=my-app"
      namespace: my-namespace
      dataset: "$env"
      parser:
        name: nginx
        dataset: "$env"
        options:
          log_format: "blah"

【讨论】:

templatefile 确实是一个好方法,但请注意the documentation's advice about using templatefile to generate YAML。如果您在模板中使用yamlencode,那么 Terraform 可以保证结果始终是有效的 YAML 语法,即使模板变量需要引用或转义。

以上是关于如何将变量传递给 heml.tf 中的 yaml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

无法将环境变量传递给 azure 管道 yaml 中的 powershell 脚本(非内联)

如何将变量传递给devops上的sql部署?

将 YAML 文件中的列表传递给 python

Flutter:读取 build.yaml 文件中传递给 build_runner 的变量

如何将一个道具作为变量传递给 React 中的另一个道具?

如何通过 gcloud cli args 或环境变量将 secretEnv 指定给 cloudbuild.yaml