2017-12-27 1001 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 
一個新的子文件夾