Terraform 从子模块输出中定义 FortiOS VIP 组成员块

Terraform Define FortiOS VIP Group Member block from child module outputs

我正在使用 Terraform 在我定义的自定义子模块中构建 Fortigate 资源。子模块的每个实例将使用 fortios_firewall_vip 资源构建 12 个唯一的 VIP。 在根模块中,我尝试使用 fortios_firewall_vipgrp 资源定义一个 VIP 组,其中包括 ALLALL[= 构建的 VIP 46=] 子模块的实例。我似乎在为如何在 vipgrp 资源中构建 member{} 块而苦苦挣扎。

这是文件夹结构的细分:

root/
| _
    fortinet.tf
    modules/instance
    | _
        main.tf
        outputs.tf

main.tf 文件是我为 each 实例构建 12 个唯一 VIP 的地方,outputs.tf 文件是我保存所有 VIP 名称以在 fortinet.tf 根文件中引用的地方。

我试过将 VIP 名称保存为列表和地图,但我不确定哪种方法更好。

列表输出示例:

output "vips" {
  value = [
    fortios_firewall_vip.vip1.name,
    fortios_firewall_vip.vip2.name,
    etc...
  ]
}

地图输出示例:

output "vips" {
  value = {
    name = fortios_firewall_vip.vip1.name
    name = fortios_firewall_vip.vip2.name
    etc...
  }
}

在根 fortinet.tf 文件中,我定义了一个带有成员块的 VIP 组,并试图在其中“展开”所有 VIP 实例。 我想也许有了地图输出,我可以像这样简单地将它们全部合并成一个巨大的块:

resource "fortios_firewall_vipgrp" "vipgrp" {
  name = "example-vipgrp"
  member = merge(module.instance[*].vips)
}

但是,我收到一条错误消息
An argument named "member" is not expected here. Did you mean to define a block of type "member"?

我是 Terraform 的新手,所以我正在努力解决我应该在这里谷歌搜索寻求帮助的术语......这甚至可能吗?

任何输入都将非常有帮助。谢谢!

member 是一个 ,不是参数。所以应该是:

resource "fortios_firewall_vipgrp" "vipgrp" {
  name = "example-vipgrp"
  member {
     # this merge here probably also need changing, 
     # but my answer covers your error of missing member block, 
     # not whether your merge is correct or not.
     name = merge(module.instance[*].vips)
 }  
}