如何在 terraform 中循环遍历下面给定的变量

How do I loop through te below given variable in terraform

我正在尝试使用一个变量为多个环境创建 vnet。我不太确定这是否可能。我的变量如下

azure_vnets = {
  Prod = [
    {
      cidr = "10.10.0.0/24"
      vnet_name = "prod-vnet1"
      dns  = "10.10.0.1"
      rg   = "prodrg1"
      location = "eastus"
    },
    { 
      cidr = "10.10.1.0/24"
      vnet_name = "prod-vnet2"
      dns  = "10.10.0.2"
      rg   = "prodrg2"
      location = "eastus"
    }     
  ],
  nonProd = [
     {
      cidr = "10.10.0.0/24"
      vnet_name = "nonprod-vnet1"
      dns  = "10.10.0.1"
      rg   = "nonprodrg1"
      location = "eastus"
    },
    { 
      cidr = "10.10.1.0/24"
      vnet_name = "nonprod-vnet2"
      dns  = "10.10.0.2"
      rg   = "nonprodrg2"
      location = "eastus"
    }    
  ]
}

以便由此创建多个 vnet

resource "azurerm_virtual_network" "this" {
for_each = xxx
name = each.xxx
xxxx
xxx
}

你必须先展平它:


locals {
  flat_azure_vnets = merge([
      for env_name, env_vn_list in var.azure_vnets:
         {
           for idx, env_vn in env_vn_list:
             "${env_name}-${idx}" => env_vn
         }
    ]...)
}

然后你使用它:

resource "azurerm_virtual_network" "this" {
  for_each = local.flat_azure_vnets
  name = each.value["vnet_name"]
  xxxx
  xxx
}