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
相关产品推荐
相关产品推荐

