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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 02:25:04