Terraform 和复杂变量

Terraform and complex variables

我在 Terraform 中使用“Hetzner”提供程序。
我的计划是在 fx .auto.tfvars :

中有这样的东西
fw_openings = [
   {
      port = "22",
      protocol = "tcp",
      subnet = "100.100.100.100/32"
   },
   {
      port = "80",
      protocol = "tcp",
      subnet = "0.0.0.0/0"
   }
]

基于 fw_openings 我想生成这样的东西:

resource "hcloud_firewall" "firewall" {
   rule {
      direction = "in"
      protocol = "tcp"
      port = "22"
      source_ips = [
         "100.100.100.100/32"
      ]
   }
   rule {
      direction = "in"
      protocol = "tcp"
      port = "80"
      source_ips = [
         "0.0.0.0/0"
      ]
   }
}

我相信这是可能的(因为它看起来很微不足道)。但我似乎一直被 Terraform 的循环选项绊倒。
什么是正确的解决方案?

您可以使用 dynamic blocks:

resource "hcloud_firewall" "firewall" {
   dynamic "rule" {
   
      for_each = var.fw_openings
   
      content {
            direction = "in"
            protocol = rule.value.protocol
            port = rule.value.port
            source_ips = [
                rule.value.subnet
            ]
        }
   }
}