从模块输出(对象映射)中引用值
Referencing value from module output (object map)
我正在尝试找出一种使用 Terraform 在 Azure Key vault 中生成随机机密的绝妙方法。当我想在其他模块中使用生成的秘密时,我有点卡住了。秘密的输出是对象映射,我无法找出正确的语法来引用其他模块中生成的秘密。
一些细节:
在 Keyvault 模块中,我正在生成这样的秘密,空字符串会生成一个新秘密:
# Generate a random password
resource "random_password" "password" {
for_each = var.secrets
length = 20
min_upper = 2
min_lower = 2
min_numeric = 2
min_special = 2
override_special = "!@#$*()-_=+[]{}<>:"
keepers = {
name = each.key
}
}
# Create Azure Key Vault secrets
resource "azurerm_key_vault_secret" "secret" {
for_each = var.secrets
key_vault_id = azurerm_key_vault.key-vault.id
name = each.key
value = lookup(each.value, "value") != "" ? lookup(each.value, "value") : random_password.password[each.key].result
tags = var.tags
depends_on = [
azurerm_key_vault.key-vault,
azurerm_key_vault_access_policy.default_policy,
]
}
var.secrets是这样定义的映射:
variable "secrets" {
type = map(object({
value = string
}))
description = "Define Azure Key Vault secrets"
default = {}
}
像这样的人口:
kv-secrets = {
secret-x = {
value = ""
}
secret-y = {
value = ""
}
secret-z = {
value = ""
}
}
机密被定义为 Key vault 模块的输出,如下所示:
output "key-vault-secrets" {
value = values(azurerm_key_vault_secret.secret).*.value
}
现在假设我想在我的 terraform 项目的其他模块中使用生成的秘密,也许是 PSQL DB:
module "psql" {
source = "./modules/psql"
psql_server_name = var.psql_server_name
location = var.location
prefix = var.prefix
environment = var.environment
resource_group_name = azurerm_resource_group.rg.name
administrator_login = var.administrator_login
administrator_login_password = ?module.keyvault.key-vault-secrets?
..
..
}
有谁知道如何引用生成的秘密并将值分配给“administrator_login_password”?还是我处理错了。
信誉:https://gmusumeci.medium.com/how-to-manage-azure-key-vault-with-terraform-943bf7251369
如果你想使用 module.keyvault.key-vault-secrets["secret-x"].value'
语法,那么你的输出应该是:
output "key-vault-secrets" {
value = azurerm_key_vault_secret.secret
}
我正在尝试找出一种使用 Terraform 在 Azure Key vault 中生成随机机密的绝妙方法。当我想在其他模块中使用生成的秘密时,我有点卡住了。秘密的输出是对象映射,我无法找出正确的语法来引用其他模块中生成的秘密。
一些细节:
在 Keyvault 模块中,我正在生成这样的秘密,空字符串会生成一个新秘密:
# Generate a random password
resource "random_password" "password" {
for_each = var.secrets
length = 20
min_upper = 2
min_lower = 2
min_numeric = 2
min_special = 2
override_special = "!@#$*()-_=+[]{}<>:"
keepers = {
name = each.key
}
}
# Create Azure Key Vault secrets
resource "azurerm_key_vault_secret" "secret" {
for_each = var.secrets
key_vault_id = azurerm_key_vault.key-vault.id
name = each.key
value = lookup(each.value, "value") != "" ? lookup(each.value, "value") : random_password.password[each.key].result
tags = var.tags
depends_on = [
azurerm_key_vault.key-vault,
azurerm_key_vault_access_policy.default_policy,
]
}
var.secrets是这样定义的映射:
variable "secrets" {
type = map(object({
value = string
}))
description = "Define Azure Key Vault secrets"
default = {}
}
像这样的人口:
kv-secrets = {
secret-x = {
value = ""
}
secret-y = {
value = ""
}
secret-z = {
value = ""
}
}
机密被定义为 Key vault 模块的输出,如下所示:
output "key-vault-secrets" {
value = values(azurerm_key_vault_secret.secret).*.value
}
现在假设我想在我的 terraform 项目的其他模块中使用生成的秘密,也许是 PSQL DB:
module "psql" {
source = "./modules/psql"
psql_server_name = var.psql_server_name
location = var.location
prefix = var.prefix
environment = var.environment
resource_group_name = azurerm_resource_group.rg.name
administrator_login = var.administrator_login
administrator_login_password = ?module.keyvault.key-vault-secrets?
..
..
}
有谁知道如何引用生成的秘密并将值分配给“administrator_login_password”?还是我处理错了。
信誉:https://gmusumeci.medium.com/how-to-manage-azure-key-vault-with-terraform-943bf7251369
如果你想使用 module.keyvault.key-vault-secrets["secret-x"].value'
语法,那么你的输出应该是:
output "key-vault-secrets" {
value = azurerm_key_vault_secret.secret
}