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

Terraform动态块报错:不支持vnis块类型问题咨询

解决iosxe_interface_nve资源动态生成VNIs的报错问题

错误原因

你遇到的Blocks of type "vnis" are not expected here报错,核心是混淆了Terraform嵌套块与列表属性的用法:netascode/iosxe provider的iosxe_interface_nve资源中,vnis是一个列表类型的属性,而非可通过dynamic块生成的嵌套块结构,所以直接用dynamic "vnis"会被Terraform判定为非法语法。

正确写法

如果需要动态生成VNIs列表,直接通过列表推导式构造vnis属性的值即可,不需要使用动态块。

示例代码

假设你定义了包含VNI配置的变量:

variable "vnid_list" {
  type = list(object({
    vni            = number
    associate_vrf  = string
    ingress_replication = optional(string) # 可选属性示例
  }))
  default = [
    {vni = 1000, associate_vrf = "VRF_PROD"},
    {vni = 2000, associate_vrf = "VRF_DEV"}
  ]
}

对应的iosxe_interface_nve资源配置:

resource "iosxe_interface_nve" "nve1" {
  name                     = "NVE1"
  shutdown                 = false
  source_interface         = "Loopback0"
  host_reachability_protocol = "bgp"

  # 用列表推导式动态生成vnis属性值
  vnis = [for vni_cfg in var.vnid_list : {
    vni            = vni_cfg.vni
    associate_vrf  = vni_cfg.associate_vrf
    # 若有可选属性,按需添加
    ingress_replication = vni_cfg.ingress_replication != null ? vni_cfg.ingress_replication : null
  }]
}

关键说明

  • 动态块(dynamic "xxx")仅适用于Terraform资源定义中明确标记为嵌套块的结构(例如部分路由资源中的route块、ACL资源中的rule块)
  • 查看iosxe_interface_nve的资源schema可以确认:vnis的类型是list(object({...})),属于普通属性,因此直接赋值列表即可实现动态生成

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:06:25