【问题标题】:Terraform - Output a map with key as value of for_each while resource creationTerraform - 在创建资源时输出一个地图,其中键作为 for_each 的值
【发布时间】:2023-02-16 17:08:55
【问题描述】:

我正在尝试解决以下问题:

首先,根据提供给资源的列表条目创建资源。下面是 tf 代码,我已经为它写了:

resource "azurerm_key_vault" "application_key_vault" {
  foreach             = toset(var.app_names)
  name                = "${each.value}-kv"
  resource_group_name = azurerm_resource_group.aks_resource_group.name
  location            = var.location
  tenant_id           = local.tenant_id
  sku_name            = "standard"

  dynamic "contact" {
    for_each = var.key_vault_contact_emails
    content {
      email = contact.value
    }
  }

  network_acls {
    default_action = "Deny"
    bypass         = "AzureServices"
    virtual_network_subnet_ids = local.key_vault_allowed_subnets_set
  }

  tags = local.all_tags
  depends_on = [azurerm_resource_group.aks_resource_group]
}

现在,假设“app_names”具有值 [“app1”、“app2”、“app3”]。并且创建的 keyvaults 有 ids ["id1", "id2", "id3"]。 有没有一种方法可以动态创建上面的地图,它看起来像这样:

{
 "app1" : "id1",
 "app2" : "id2",
 "app3" : "id3",
}

我尝试使用类似这样的“输出”,但无法弄清楚我应该如何获取用于创建每个 keyvault 的 app_name:

output "application_app_name_by_key_vault_id_map" {
  value = { for akv in azurerm_key_vault.application_key_vault : <not sure how to get app_name here> => akv.id }
}

【问题讨论】:

    标签: terraform terraform-provider-azure azure-rm


    【解决方案1】:

    由于您正在使用 for_each 创建 azurerm_key_vault 资源,因此它的行为与任何其他键值映射一样。换句话说,您可以执行以下操作:

    output "application_app_name_by_key_vault_id_map" {
      value = { for k, v in azurerm_key_vault.application_key_vault: k => v.id }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-16
      相关资源
      最近更新 更多