如何在Terraform模板文件中忽略预定义变量?
在Terraform templatefile中保留不被解析的${__org.name}这类变量
给你两个可行的解决办法:
方法一:模板内转义,移除无效变量定义
你之前的错误根源是在vars参数里定义了__org.name这个不符合Terraform命名规则的变量(Terraform要求变量名必须以字母开头,只能包含字母、数字和下划线)。正确的做法是:
- 从
vars里删掉"__org.name" = "$${__org.name}"这一行 - 在你的
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
相关产品推荐
相关产品推荐

