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

Terraform嵌套dynamic block读取JSON二层属性报错求助

问题原因

你的错误来自于内层members动态块的for_each参数传入了非集合类型的值:
你JSON结构里的avi_gslbservice_groups_ip是单个对象,并不是列表/集合类型。当你把单个对象直接传给for_each时,Terraform会自动将对象的键值对拆分为独立迭代项,迭代出来的members.value实际是单个属性的值(比如url2、false),自然无法通过["host"]/["enabled"]索引取值。

解决方案

分两种场景适配:

场景1:每个group固定只有1个member(和你当前JSON结构匹配)

不需要嵌套dynamic "members"块,直接在groups的content里写member配置即可,修正后的代码如下:

dynamic "groups" {   
  for_each = var.avi_gslbservice_groups
  content {
    members {
      ip {
        type = "V4"
        addr = ""
      }
      fqdn = groups.value.avi_gslbservice_groups_ip.host
      vs_uuid = ""
      cluster_uuid = ""
      ratio = 1
      enabled = groups.value.avi_gslbservice_groups_ip.enabled
    }         
    name = groups.value.name
    priority = groups.value.priority
    algorithm = groups.value.algorithm
  }
}

场景2:后续需要支持1个group对应多个member

先修改你的JSON结构,把avi_gslbservice_groups_ip改为数组类型:

{
    "avi_gslbservice_groups": [
        {
            "name": "us-east-1",
            "priority": 10,
            "algorithm": "GSLB_ALGORITHM_ROUND_ROBIN",
            "avi_gslbservice_groups_ip": [
                {
                    "host": "url2",
                    "enabled": "false"
                }
            ]
        },
        {
            "name": "us-east-2",
            "priority": 7,
            "algorithm": "GSLB_ALGORITHM_TOPOLOGY",
            "avi_gslbservice_groups_ip": [
                {
                    "host": "url1",
                    "enabled": "false"
                }
            ]
        }
    ]
}

修改后你原来的dynamic "members"的迭代逻辑就可以正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 03:00:01