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

Terraform中如何处理空VPC列表的条件赋值与子模块传递问题

解决方案

核心思路是让local.pub和local.pri的vpc字段类型完全匹配,同时满足子模块对vpc元素结构的要求,分两种场景处理:

场景1:子模块接受空vpc列表

通过显式类型转换,将local.pub的空列表转换为与local.pri一致的类型,既通过Terraform的类型检查,又传递符合子模块要求的空列表:

locals {
  pub = {
    (var.zname) = {
      comment = var.zname
      # 显式声明空列表类型为包含id字段的对象列表,与pri的vpc类型对齐
      vpc     = list(object({ id = string }))([])
    }
  }
  pri = {
    (var.zname) = {
      comment = var.zname
      vpc     = [{ id = var.ids }]
    }
  }
  fvar = length(var.ids) != 0 ? local.pri : local.pub
}

场景2:子模块要求vpc列表必须包含元素(且每个元素需有id字段)

如果子模块不允许空列表,可让local.pub的vpc列表包含一个符合结构的空值对象,确保类型匹配,子模块通常会忽略无效的id值:

用null作为id值(如果子模块接受null)

locals {
  pub = {
    (var.zname) = {
      comment = var.zname
      vpc     = [{ id = null }]
    }
  }
  pri = {
    (var.zname) = {
      comment = var.zname
      vpc     = [{ id = var.ids }]
    }
  }
  fvar = length(var.ids) != 0 ? local.pri : local.pub
}

用空字符串作为id值(如果子模块要求id为非null字符串)

locals {
  pub = {
    (var.zname) = {
      comment = var.zname
      vpc     = [{ id = "" }]
    }
  }
  pri = {
    (var.zname) = {
      comment = var.zname
      vpc     = [{ id = var.ids }]
    }
  }
  fvar = length(var.ids) != 0 ? local.pri : local.pub
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 23:17:08