You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terraform模板文件中忽略预定义变量?

在Terraform templatefile中保留不被解析的${__org.name}这类变量

给你两个可行的解决办法:

方法一:模板内转义,移除无效变量定义

你之前的错误根源是在vars参数里定义了__org.name这个不符合Terraform命名规则的变量(Terraform要求变量名必须以字母开头,只能包含字母、数字和下划线)。正确的做法是:

  1. 从vars里删掉"__org.name" = "$${__org.name}"这一行
  2. 在你的test.json模板文件里,把需要保留的${__org.name}改成$${__org.name}

修改后的Terraform代码:

resource "grafana_dashboard" "test" {
  config_json = templatefile("test.json",
    {
      DS_MYSQL = grafana_data_source.mysql.uid
    })
}

模板文件test.json示例(只修改需要保留的变量):

{
  "dashboard": {
    "title": "Test Dashboard",
    "orgName": "$${__org.name}",
    "datasource": "${DS_MYSQL}"
  }
}

这样templatefile会把$${__org.name}输出为${__org.name},而${DS_MYSQL}会正常替换为数据源的UID。

方法二:用file+replace组合替代templatefile

如果你的模板是自动生成的,没法手动修改里面的${__org.name},可以跳过templatefile,直接用file读取原始模板,再用replace替换需要Terraform处理的变量:

resource "grafana_dashboard" "test" {
  config_json = replace(
    file("test.json"),
    "${DS_MYSQL}",
    grafana_data_source.mysql.uid
  )
}

这种方式下,file会原封不动读取模板内容,replace只替换指定的${DS_MYSQL},${__org.name}会完全保留下来。如果有多个变量要替换,嵌套replace就行:

resource "grafana_dashboard" "test" {
  config_json = replace(
    replace(
      file("test.json"),
      "${DS_MYSQL}",
      grafana_data_source.mysql.uid
    ),
    "${ANOTHER_VAR}",
    var.another_value
  )
}

内容的提问来源于stack exchange,提问作者dur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:52:08