Terraform Определяет блок участника VIP-группы FortiOS из выходов дочернего модуля

#terraform #fortigate

Вопрос:

Я использую Terraform для создания ресурсов для поиска в пользовательском дочернем модуле, который я определил. Каждый экземпляр дочернего модуля создаст 12 уникальных VIP-персон, используя ресурс fortios_firewall_vip. Внутри корневого модуля я пытаюсь определить VIP-группу, используя ресурс fortios_firewall_vipgrp, который будет включать в себя ВСЕХ VIP-персон, созданных из ВСЕХ экземпляров дочернего модуля. Кажется, я борюсь с тем, как создать блок{} участника в ресурсе vipgrp.

Вот разбивка структуры папок:

 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, поэтому я борюсь с тем, какую терминологию мне следует использовать для поиска помощи здесь… Возможно ли это вообще?

Любой вклад был бы чрезвычайно полезен. Спасибо!

Ответ №1:


член-это блок, а не аргумент. Так и должно быть:

 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)
 }  
}
 

Комментарии:

1. Спасибо за ваши отзывы по этому поводу! Оказывается, то, чего я пытаюсь достичь, не может быть сделано даже с поставщиком Terraform FortiOS, но все еще возможно на Fortigate. При попытке добавить несколько VIP-персон подряд в блок участника{} он жалуется на ограничение символов в диапазоне от 0 до 64, что кажется мне немного смешным.