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

Terraform校验非空非null后拼接list(map)磁盘列表的方法

Terraform 实现附加盘条件拼接的方案

直接用条件判断配合内置类型转换函数就能实现需求,核心逻辑是:校验add_disk里的磁盘大小参数,符合要求才把add_disk加入拼接,不符合就传空列表,不影响启动磁盘的配置。

逻辑说明

你当前的add_disk是单元素列表,只需要校验列表内第一个(也是唯一一个)磁盘配置的disk_size_gb字段,同时满足三个要求即可:

  • 值不为null
  • 转成字符串后不是空串,兼容变量误传空值的场景
  • 转成数值后大于0,兼容变量传字符串格式数字的场景

用三元表达式做分支判断:校验通过返回原add_disk列表,不通过返回空列表[],最后和固定的boot_disk拼接即可。

修改后的完整locals块代码

locals {
  boot_disk = [
    {
      source_image = var.source_image 
      disk_size_gb = var.disk_size_gb
      disk_type    = var.disk_type
      disk_labels  = var.disk_labels
      auto_delete  = var.auto_delete
      mode         = "READ_WRITE"
      boot         = "true"
    }
  ]

  add_disk = [
    {
      source_image = var.add_source_image 
      disk_size_gb = var.add_disk_size_gb
      disk_type    = var.add1DiskType
      auto_delete  = var.additional_disk_auto_delete
      boot         = "false"
      mode         = "READ_WRITE"
    }
  ]

  # 校验附加盘大小合法性,合法才保留该配置
  valid_add_disk = (
    local.add_disk[0].disk_size_gb != null
    && tostring(local.add_disk[0].disk_size_gb) != ""
    && tonumber(local.add_disk[0].disk_size_gb) > 0
  ) ? local.add_disk : []

  all_disk = concat(local.boot_disk, local.valid_add_disk)
}

扩展场景适配

如果后续你把add_disk改成多块附加盘的列表,需要逐块过滤不符合大小要求的配置,可以把valid_add_disk的逻辑替换为for循环过滤:

valid_add_disk = [for disk in local.add_disk : disk if (
  disk.disk_size_gb != null
  && tostring(disk.disk_size_gb) != ""
  && tonumber(disk.disk_size_gb) > 0
)]

这种写法会自动遍历所有附加盘配置,只保留大小符合要求的条目,不受列表长度限制。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 05:06:29