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 组,其中包括 ALL 从 ALL[= 构建的 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)
}
}
我正在使用 Terraform 在我定义的自定义子模块中构建 Fortigate 资源。子模块的每个实例将使用 fortios_firewall_vip 资源构建 12 个唯一的 VIP。 在根模块中,我尝试使用 fortios_firewall_vipgrp 资源定义一个 VIP 组,其中包括 ALL 从 ALL[= 构建的 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)
}
}