如何实例化呈现template_file的内容?
How to instantiate contents of rendered template_file?
我有一个用于列表的模板文件:
variable "users" {
type = "list"
default = [
"blackwidow",
"hulk",
"marvel",
]
}
// This will loop through the users list above and render out code for
// each item in the list.
data "template_file" "init" {
template = file("user_template.tpl")
count = length(var.users)
vars = {
username = var.users[count.index]
bucketid = aws_s3_bucket.myFTP_Bucket.id
}
}
模板文件有多个aws资源,如
- "aws_transfer_user"
- "aws_s3_bucket_object"
- "aws_transfer_ssh_key"
等等...事实上,它可以拥有更多的东西。它也有一些地形变量。
此数据模板非常适合呈现模板文件的内容,替换我的用户名。
但是这就是 terraform 所做的一切。
Terraform 不会实例化模板文件的渲染内容。它只是将它作为一个字符串保存在内存中。有点像 C 预处理器进行替换,但不 'including' 文件。
有点令人沮丧。我希望 Terraform 实例化我呈现的模板文件的内容。我该怎么做?
template_file
数据源(连同已在 Terraform 0.12 中替换它的 templatefile
函数)用于字符串模板,而不是用于模块化 Terraform 配置。
要为集合中的每个项目生成一组不同的资源实例,我们使用 resource for_each
:
variable "users" {
type = set(string)
default = [
"blackwidow",
"hulk",
"marvel",
]
}
resource "aws_transfer_user" "example" {
for_each = var.users
# ...
}
resource "aws_transfer_user" "example" {
for_each = var.users
# ...
}
resource "aws_s3_bucket_object" "example" {
for_each = var.users
# ...
}
resource "aws_transfer_ssh_key" "example" {
for_each = aws_transfer_user.example
# ...
}
在每个资源块中,您可以使用 each.key
来引用每个用户名。在resource "aws_transfer_ssh_key" "example"
块内部,因为我使用了aws_transfer_user.example
作为重复表达式,所以您还可以使用each.value
来访问对应的aws_transfer_user
对象的属性。 for_each
表达式还用于告诉 Terraform aws_transfer_ssh_key.example
取决于 aws_transfer_user.example
.
我有一个用于列表的模板文件:
variable "users" {
type = "list"
default = [
"blackwidow",
"hulk",
"marvel",
]
}
// This will loop through the users list above and render out code for
// each item in the list.
data "template_file" "init" {
template = file("user_template.tpl")
count = length(var.users)
vars = {
username = var.users[count.index]
bucketid = aws_s3_bucket.myFTP_Bucket.id
}
}
模板文件有多个aws资源,如
- "aws_transfer_user"
- "aws_s3_bucket_object"
- "aws_transfer_ssh_key"
等等...事实上,它可以拥有更多的东西。它也有一些地形变量。
此数据模板非常适合呈现模板文件的内容,替换我的用户名。
但是这就是 terraform 所做的一切。
Terraform 不会实例化模板文件的渲染内容。它只是将它作为一个字符串保存在内存中。有点像 C 预处理器进行替换,但不 'including' 文件。 有点令人沮丧。我希望 Terraform 实例化我呈现的模板文件的内容。我该怎么做?
template_file
数据源(连同已在 Terraform 0.12 中替换它的 templatefile
函数)用于字符串模板,而不是用于模块化 Terraform 配置。
要为集合中的每个项目生成一组不同的资源实例,我们使用 resource for_each
:
variable "users" {
type = set(string)
default = [
"blackwidow",
"hulk",
"marvel",
]
}
resource "aws_transfer_user" "example" {
for_each = var.users
# ...
}
resource "aws_transfer_user" "example" {
for_each = var.users
# ...
}
resource "aws_s3_bucket_object" "example" {
for_each = var.users
# ...
}
resource "aws_transfer_ssh_key" "example" {
for_each = aws_transfer_user.example
# ...
}
在每个资源块中,您可以使用 each.key
来引用每个用户名。在resource "aws_transfer_ssh_key" "example"
块内部,因为我使用了aws_transfer_user.example
作为重复表达式,所以您还可以使用each.value
来访问对应的aws_transfer_user
对象的属性。 for_each
表达式还用于告诉 Terraform aws_transfer_ssh_key.example
取决于 aws_transfer_user.example
.