1

我正在使用 Terraform 在我定义的自定义子模块中构建 Fortigate 资源。子模块的每个实例将使用fortios_firewall_vip资源构建 12 个唯一的 VIP。在根模块中,我尝试使用fortios_firewall_vipgrp资源定义一个 VIP 组,该资源将包括从子模块的所有实例构建的所有 VIP 我似乎在为如何在 vipgp 资​​源中构建 member{} 块而苦苦挣扎。

以下是文件夹结构的细分:

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

main.tf文件是我为每个实例构建 12 个唯一 VIP 的位置,output.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 的新手,所以我正在努力寻找我应该在这里搜索帮助的术语......这甚至可能吗?

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

4

1 回答 1

1

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)
 }  
}
于 2021-09-15T23:58:53.187 回答