【问题标题】:Terraform Define FortiOS VIP Group Member block from child module outputsTerraform 从子模块输出定义 FortiOS VIP 组成员块
【发布时间】:2021-11-10 20:32:09
【问题描述】:

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

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

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

main.tf 文件是我为 每个 实例构建 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 的新手,所以我在纠结应该用什么术语在这里谷歌上寻求帮助……这可能吗?

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

【问题讨论】:

    标签: terraform fortigate


    【解决方案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)
     }  
    }
    

    【讨论】:

    • 感谢您对此的反馈!事实证明,我想要完成的任务甚至无法通过 Terraform FortiOS 提供程序完成,但在 Fortigate 上仍然可以完成。当尝试将多个 VIP 连续添加到 member{} 块时,它会抱怨字符限制在 0 - 64 范围内,这对我来说似乎有点荒谬。
    猜你喜欢
    • 2021-02-12
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 2018-04-12
    • 2021-07-08
    • 2021-12-17
    • 2021-04-09
    • 2019-12-07
    相关资源
    最近更新 更多