让 Terraform 为单个案例工作通常更直接,然后使用count
参数将其扩展为 > 1 个案例。
正如文档中提到的那样,您无法访问模板内部的插值函数,您需要将它们variables
通过template_dir
.
要访问通常可用于 Terraform 配置的插值(例如其他变量、资源属性、模块输出等),您必须通过 vars [...]
对于 single database_user
,我们将database_user
as传递template_dir
给 to 使用 as${user}
sql_templates/create_user.sql
CREATE USER ${user} FOR LOGON ${user};
EXEC sp_addrolemember 'db_datareader','${user}'
GO
main.tf
variable "database_user" {
default = "td"
}
resource "template_dir" "config" {
source_dir = "sql_templates"
destination_dir = "sql_scripts"
vars = {
user = "${var.database_user}"
}
}
这将创建预期的输出
.
├── main.tf
├── sql_scripts
│ └── create_user.sql
└── sql_templates
└── create_user.sql
要将其扩展到多个database_users
,您可以利用资源count
内部
template_dir
。
main.tf
variable "database_users" {
default = ["td", "tdus", "tdbusrs"]
}
resource "template_dir" "config" {
source_dir = "sql_templates"
destination_dir = "sql_scripts/${var.database_users[count.index]}/"
count = "${length(var.database_users)}"
vars = {
user = "${element(var.database_users, count.index)}"
}
}
注意:使用${var.database_users[count.index]}
inside
desination_dir
可以防止 terraform 对所有渲染输出使用相同的目标,而是为每个用户创建一个新的子文件夹
.
├── main.tf
├── sql_scripts
│ ├── td
│ │ └── create_user.sql
│ ├── tdbusrs
│ │ └── create_user.sql
│ └── tdus
│ └── create_user.sql
└── sql_templates
└── create_user.sql