gpt4 book ai didi

mysql - Terraform SQL 从变量创建用户

转载 作者:行者123 更新时间:2023-11-29 10:27:38 27 4
gpt4 key购买 nike

我在 tfvars 中定义了用户:

test_database_users = ["td" , "tdus", "tdbusrs"]

资源定义为:

resource "template_dir" "test_db_users" {
...
vars {
db_tusers = ${element(var.test_database_users, count.index)}"
}
}

尝试创建 SQL 命令来创建每个数据库用户,但这不起作用:

CREATE USER ${element(db_tusers, 0)} FOR LOGON ${element(db_tusers, 0)};
EXEC sp_addrolemember 'db_datareader','${element(db_tusers, 0)}'
GO

我正在努力寻找正确的语法来将每个用户带入创建用户命令。

最佳答案

让 Terraform 适用于单个案例通常更简单,然后使用 count 参数将其扩展到 > 1 个案例。

如文档 mention ,您无法访问模板内部的插值函数,您需要通过 template_dir 中的 variables 资源传递它们。

To access interpolations that are normally available to Terraform configuration (such as other variables, resource attributes, module outputs, etc.) you'll have to expose them via vars [...]

对于单个 database_user,我们将 database_user as 传递到 template_dir 中以用作 ${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,您可以在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]}desination_dir 防止 terraform 对所有目标使用相同的目标渲染输出,而是为每个用户创建一个新的子文件夹

.
├── main.tf
├── sql_scripts
│   ├── td
│   │   └── create_user.sql
│   ├── tdbusrs
│   │   └── create_user.sql
│   └── tdus
│   └── create_user.sql
└── sql_templates
└── create_user.sql

关于mysql - Terraform SQL 从变量创建用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47997844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com