获取 terraform 动态块中的索引计数
Get index count in terraform dynamic block
请告诉我,如何在遍历对象时获取动态块中的迭代索引?
我需要用索引替换 0 以获得不同用户的不同密码。
resource "random_password" "pwd" {
count = length(var.users)
length = 18
special = true
override_special = "_!%@"
}
resource "yandex_mdb_postgresql_cluster" "mdb_postgres" {
dynamic "user" {
for_each = var.users
content {
name = user.value.name
password = user.value.password == "" || user.value.password == null ? random_password.pwd[0].result : user.value.password
}
}
}
用户是对象
variable "users" {
type = map(object({
name = string
password = string
conn_limit = number
permissions = list(object({
database_name = string
}))
}))
}
由于您在 yandex_mdb_postgresql_cluster
资源中使用 for_each
,因此在创建密码时可以使用相同的逻辑。这样,将创建与第二个资源具有相同键名的 random_password
资源。这是一个工作示例:
resource "random_password" "pwd" {
for_each = var.users
length = 18
special = true
override_special = "_!%@"
}
variable "users" {
type = map(object({
name = string
password = string
conn_limit = number
permissions = list(object({
database_name = string
}))
}))
}
对于具有以下值的 terraform.tfvars
文件:
users = {
"marko" = {
conn_limit = 1
name = "marko"
password = "pass123"
permissions = [{
database_name = "dbname"
}]
},
"valeriy" = {
conn_limit = 1
name = "valeriy"
password = "pass456"
permissions = [{
database_name = "dbname1"
}]
}
}
它将创建两个元素,其键对应于 users
变量中的键:
Terraform will perform the following actions:
# random_password.pwd["marko"] will be created
+ resource "random_password" "pwd" {
+ id = (known after apply)
+ length = 18
+ lower = true
+ min_lower = 0
+ min_numeric = 0
+ min_special = 0
+ min_upper = 0
+ number = true
+ override_special = "_!%@"
+ result = (sensitive value)
+ special = true
+ upper = true
}
# random_password.pwd["valeriy"] will be created
+ resource "random_password" "pwd" {
+ id = (known after apply)
+ length = 18
+ lower = true
+ min_lower = 0
+ min_numeric = 0
+ min_special = 0
+ min_upper = 0
+ number = true
+ override_special = "_!%@"
+ result = (sensitive value)
+ special = true
+ upper = true
}
Plan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
random_password.pwd["valeriy"]: Creating...
random_password.pwd["marko"]: Creating...
random_password.pwd["valeriy"]: Creation complete after 0s [id=none]
random_password.pwd["marko"]: Creation complete after 0s [id=none]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
注意方括号中的重点,例如:random_password.pwd["valeriy"]
.
这意味着您现在可以使用 users
变量中的密钥名称来引用第二个资源中的密码:
resource "yandex_mdb_postgresql_cluster" "mdb_postgres" {
dynamic "user" {
for_each = var.users
content {
name = user.value.name
password = user.value.password == "" || user.value.password == null ? random_password.pwd[user.key].result : user.value.password
}
}
}
请注意,现在访问随机密码值的方法是 random_password.pwd[user.key].result
中的 user.key
。
请告诉我,如何在遍历对象时获取动态块中的迭代索引? 我需要用索引替换 0 以获得不同用户的不同密码。
resource "random_password" "pwd" {
count = length(var.users)
length = 18
special = true
override_special = "_!%@"
}
resource "yandex_mdb_postgresql_cluster" "mdb_postgres" {
dynamic "user" {
for_each = var.users
content {
name = user.value.name
password = user.value.password == "" || user.value.password == null ? random_password.pwd[0].result : user.value.password
}
}
}
用户是对象
variable "users" {
type = map(object({
name = string
password = string
conn_limit = number
permissions = list(object({
database_name = string
}))
}))
}
由于您在 yandex_mdb_postgresql_cluster
资源中使用 for_each
,因此在创建密码时可以使用相同的逻辑。这样,将创建与第二个资源具有相同键名的 random_password
资源。这是一个工作示例:
resource "random_password" "pwd" {
for_each = var.users
length = 18
special = true
override_special = "_!%@"
}
variable "users" {
type = map(object({
name = string
password = string
conn_limit = number
permissions = list(object({
database_name = string
}))
}))
}
对于具有以下值的 terraform.tfvars
文件:
users = {
"marko" = {
conn_limit = 1
name = "marko"
password = "pass123"
permissions = [{
database_name = "dbname"
}]
},
"valeriy" = {
conn_limit = 1
name = "valeriy"
password = "pass456"
permissions = [{
database_name = "dbname1"
}]
}
}
它将创建两个元素,其键对应于 users
变量中的键:
Terraform will perform the following actions:
# random_password.pwd["marko"] will be created
+ resource "random_password" "pwd" {
+ id = (known after apply)
+ length = 18
+ lower = true
+ min_lower = 0
+ min_numeric = 0
+ min_special = 0
+ min_upper = 0
+ number = true
+ override_special = "_!%@"
+ result = (sensitive value)
+ special = true
+ upper = true
}
# random_password.pwd["valeriy"] will be created
+ resource "random_password" "pwd" {
+ id = (known after apply)
+ length = 18
+ lower = true
+ min_lower = 0
+ min_numeric = 0
+ min_special = 0
+ min_upper = 0
+ number = true
+ override_special = "_!%@"
+ result = (sensitive value)
+ special = true
+ upper = true
}
Plan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
random_password.pwd["valeriy"]: Creating...
random_password.pwd["marko"]: Creating...
random_password.pwd["valeriy"]: Creation complete after 0s [id=none]
random_password.pwd["marko"]: Creation complete after 0s [id=none]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
注意方括号中的重点,例如:random_password.pwd["valeriy"]
.
这意味着您现在可以使用 users
变量中的密钥名称来引用第二个资源中的密码:
resource "yandex_mdb_postgresql_cluster" "mdb_postgres" {
dynamic "user" {
for_each = var.users
content {
name = user.value.name
password = user.value.password == "" || user.value.password == null ? random_password.pwd[user.key].result : user.value.password
}
}
}
请注意,现在访问随机密码值的方法是 random_password.pwd[user.key].result
中的 user.key
。