如何合并Terraform子模块输出的FortiOS VIP创建VIP组
解决方案
报错原因
An argument named "member" is not expected here报错的核心原因是:fortios_firewall_vipgrp资源的member是嵌套块类型,而非普通的列表参数,不能直接赋值,需要通过动态块语法生成多个member块。
配置步骤
- 子模块输出选择列表格式即可,不要用映射(你给出的映射示例存在重复key
name,本身语法不合法,且列表更适合后续平铺合并),保持子模块outputs.tf的列表写法:
output "vips" { value = [ fortios_firewall_vip.vip1.name, fortios_firewall_vip.vip2.name, // 剩余10个VIP依次补充 ] }
- 根模块中先把所有子模块实例输出的VIP列表合并为一个扁平的总列表,再用
dynamic语法动态生成member块,fortinet.tf写法如下:
# 把所有子模块实例返回的二维VIP列表压平为一维全量VIP名称列表 locals { all_vips = flatten(module.instance[*].vips) } resource "fortios_firewall_vipgrp" "vipgrp" { name = "example-vipgrp" # 遍历全量VIP列表,每个VIP生成一个对应member块 dynamic "member" { for_each = local.all_vips content { name = member.value } } }
内容的提问来源于stack exchange,提问作者ShaneC
相关产品推荐
相关产品推荐

