Terraform嵌套for_each处理哈希数据块报错求助
解决Terraform网络资源配置的for_each属性错误
首先明确你的数据结构:var.network_hash 是一个map(object),其中每个键(比如FT1)对应一个包含所有网络属性的对象。你的错误源于对for_each遍历map时的each对象理解有误,以及不必要的嵌套数据处理。
1. 修正资源中的for_each用法
直接用var.network_hash作为for_each的数据源,不需要额外处理。在hpegl_metal_network资源中:
resource "hpegl_metal_network" "pnet" { for_each = var.network_hash name = each.key # each.key对应FT1这类网络名称 description = each.value.desc # each.value是对应的属性对象,直接访问desc location = each.value.location vlan = each.value.vlan # 其他IP池相关属性同理,直接用each.value.IPPool_xxx格式调用 }
错误原因解释:
each.value本身就是你定义的object类型(包含desc、location等11个属性),不存在key或value子属性,所以之前写each.value.key和each.value.value.desc会触发属性不存在的错误。
2. 移除不必要的locals flatten处理
你尝试的locals代码完全多余,因为var.network_hash已经是扁平化的map结构,并非嵌套map。之前的locals错误地把network(即map的value,是object)当成嵌套map去遍历,导致net_details变成了object里的单个属性值(比如string类型的desc),自然无法访问.value属性。
3. 额外检查:变量定义的vlan类型匹配
注意你的JSON数据中vlan是数字101,但变量定义里vlan = string,建议统一类型:要么把变量里的vlan改成number,要么传入数据时把vlan转成字符串,避免类型不匹配的潜在问题。
内容的提问来源于stack exchange,提问作者rahulruns
相关产品推荐
相关产品推荐

