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
相关产品推荐
相关产品推荐

