Terraform template_provider 数据源输出的正确方法
Correct way to Terraform template_provider data source output
我正在尝试使用 Terraform 中的模板渲染地图的输出:
variable "default_tags" {
type = "map"
default = {
"tag1" ="Tag A",
"tag2" ="Tag B"
}
}
定义一个 template_file 数据源来渲染地图:
```
data "template_file" "test" {
template = "${data}"
vars {
data = "${join(",", formatlist("key: %s, val: %s. ", keys(var.default_tags), values(var.default_tags)))}"
}
}
```
我的输出块应该是这样的:
```
output "default_tags_rendered" {
value="${data.template_file.test.rendered}"
}
```
但是我在规划时遇到了这个错误:
```
Error: data.template_file.test: 1 error(s) occurred:
* data.template_file.test: invalid variable syntax: "data". Did you mean 'var.data'? If this is part of inline `template` parameter
then you must escape the interpolation with two dollar signs. For
example: ${a} becomes $${a}.
```
输出渲染模板的正确方法是什么?
这可能更适合像这样使用 local values
locals {
data = "${join(",", formatlist("key: %s, val: %s. ", keys(var.default_tags), values(var.default_tags)))}"
}
output "default_tags_rendered" {
value="${local.data}"
}
推理是因为template_file provisioner主要用于需要通过标准插值语法运行的文件(或内联模板)。在这种情况下,您没有任何变量要插入到模板中 - 您有一个变量进来,您需要改变它的值。
我正在尝试使用 Terraform 中的模板渲染地图的输出:
variable "default_tags" {
type = "map"
default = {
"tag1" ="Tag A",
"tag2" ="Tag B"
}
}
定义一个 template_file 数据源来渲染地图:
```
data "template_file" "test" {
template = "${data}"
vars {
data = "${join(",", formatlist("key: %s, val: %s. ", keys(var.default_tags), values(var.default_tags)))}"
}
}
```
我的输出块应该是这样的:
```
output "default_tags_rendered" {
value="${data.template_file.test.rendered}"
}
```
但是我在规划时遇到了这个错误:
```
Error: data.template_file.test: 1 error(s) occurred:
* data.template_file.test: invalid variable syntax: "data". Did you mean 'var.data'? If this is part of inline `template` parameter
then you must escape the interpolation with two dollar signs. For
example: ${a} becomes $${a}.
```
输出渲染模板的正确方法是什么?
这可能更适合像这样使用 local values
locals {
data = "${join(",", formatlist("key: %s, val: %s. ", keys(var.default_tags), values(var.default_tags)))}"
}
output "default_tags_rendered" {
value="${local.data}"
}
推理是因为template_file provisioner主要用于需要通过标准插值语法运行的文件(或内联模板)。在这种情况下,您没有任何变量要插入到模板中 - 您有一个变量进来,您需要改变它的值。