【问题标题】:Terraform SQL create users from variableTerraform SQL 从变量创建用户
【发布时间】:2018-06-08 10:23:32
【问题描述】:

我在 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

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

【问题讨论】:

  • 这可能更适合Server Fault,因为它与基础架构相关。

标签: mysql terraform multiple-users


【解决方案1】:

将 Terraform 用于单个案例通常更直接,然后使用 count 参数将其扩展为 > 1 个案例。

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

要访问通常可用于 Terraform 配置的插值(例如其他变量、资源属性、模块输出等),您必须通过 vars [...] 公开它们

对于单个database_user,我们将database_user 传递给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,您可以在内部使用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]} desination_dir 防止 terraform 对所有 渲染输出,而是为每个用户创建一个新的子文件夹

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

【讨论】:

    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    相关资源
    最近更新 更多