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
]
}
}
}
我在 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
]
}
}
}