You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform同一资源同时遍历map与list的实现方案咨询

Terraform 多静态端口绑定EPG解决方案

核心思路是通过嵌套遍历生成所有EPG和静态端口的组合,每个组合对应一个独立的资源实例,适配provider单tdn字符串的要求。

步骤1:预处理生成EPG与端口的组合映射

在Terraform配置中新增locals块,构造可直接用于for_each的组合数据:

locals {
  # 遍历所有EPG和静态端口,生成笛卡尔积组合
  epg_port_combinations = flatten([
    for epg_key, epg_config in var.epgs : [
      for port in var.static_ports : {
        epg_key   = epg_key
        epg_dn    = aci_application_epg.epgs[epg_key].id
        vlan_id   = epg_config.vlan_id
        port_tdn  = port
        # 生成全局唯一键,替换特殊字符避免资源意外重建
        unique_id = "${epg_key}_${replace(port, "/[\\[\\]/]/", "_")}"
      }
    ]
  ])
  # 转换为map类型供for_each使用
  epg_port_map = { for item in local.epg_port_combinations : item.unique_id => item }
}

步骤2:修改资源遍历逻辑

将原资源的for_each遍历源替换为上述构造的组合映射:

resource "aci_epg_to_static_path" "static_ports" {
  for_each           = local.epg_port_map

  application_epg_dn = each.value.epg_dn
  tdn                = each.value.port_tdn
  encap              = "vlan-${each.value.vlan_id}"
  mode               = "regular"
}

效果说明

按照你当前的变量配置,最终会生成4个独立的aci_epg_to_static_path资源(2个EPG × 2个静态端口),每个资源的tdn参数都是合法的单个字符串,完全满足provider的参数要求。

额外提醒

你贴出的变量文件开头存在多余的},字符,实际使用时需要删除避免语法报错。

内容的提问来源于stack exchange,提问作者user3655103

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 02:51:00