循环访问 bojects 的本地地图,以便在已经具有for_loop的资源上进行表达式



如何实现对 local.daily map 的循环,以便我可以根据已使用 for_each 循环的资源上的映射值创建备份策略名称?

在下面的示例中,在资源azurerm_backup_policy_file_share上,我想用 local.daily["name"] 值填充名称字段。

locals {
regions = [
"centralus",
"northeurope"
]
}
resource "azurerm_resource_group" "recovery_vault" {
name     = "recovery-vault-${terraform.workspace}-rg"
location = var.azure_region
tags = {
environment = terraform.workspace
source      = "terraform"
service     = "Backup Vault"
}
}
resource "azurerm_recovery_services_vault" "vaults" {
for_each            = toset(local.regions)
name                = "recovery-vault-${terraform.workspace}-${each.key}"
location            = each.key
resource_group_name = azurerm_resource_group.recovery_vault.name
sku                 = "Standard"
soft_delete_enabled = true
}

locals {
daily = [{
name      = "Every23h"
frequency = "Daily"
time      = "23:00"
count = 30
}
]
}
resource "azurerm_backup_policy_file_share" "daily" {
for_each            = azurerm_recovery_services_vault.vaults
name                = "need this field to be name retrieved from local.daily"
resource_group_name = each.value["resource_group_name"]
recovery_vault_name = each.value["name"]
timezone            = "UTC"

dynamic "backup" {
for_each = local.daily
content {
frequency = backup.value["frequency"]
time      = backup.value["time"]
}
}
dynamic "retention_daily" {
for_each = local.daily
content {
count = retention_daily.value["count"]
}
} 
}

我想你需要的是setproduct。 它应该看起来像这样:

resource "azurerm_backup_policy_file_share" "daily" {
for_each  = toset(setproduct(azurerm_recovery_services_vault.vaults, local.daily))
name  = each.value[1].name
resource_group_name = each.value[0]["resource_group_name"]
# ...

最新更新