2017-12-27 1280 views
0

我在tfvars定义的用户的用户:Terraform SQL创建从可变

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 

我正在努力使用正确的语法来使每个用户进入create user命令。

+0

这可能更适合[服务器故障](https://serverfault.com),因为它与基础设施相关。 – tadman

回答

1

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

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

要访问通常可对terraform配置插补(如其他变量,资源属性,模块输出,等等),你必须通过增值经销商揭露他们[...]

对于单个database_user,我们通过database_user为进入template_dir作为${user}

sql_templates/create_user.sql

使用0

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,你可以利用counttemplate_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 
一个新的子文件夹