从字符串列表中在循环中添加资源参数
Add resource argument in loop from list of strings
我正在尝试设置 Digital Ocean Database Firewall,它使用以下语法:
resource "digitalocean_database_firewall" "example-fw" {
cluster_id = digitalocean_database_cluster.app.id
rule {
type = "ip_addr"
value = "192.168.1.1"
}
rule {
type = "ip_addr"
value = "192.0.2.0"
}
}
我有一个变量,它是应该添加到防火墙的白名单 IP 列表,以及 VPC IP 块。我首先尝试使用 for_each
:
添加这些
# Postgres firewall (only allow connection inside VPC)
resource "digitalocean_database_firewall" "vpc-fw" {
cluster_id = digitalocean_database_cluster.app.id
rule {
type = "ip_addr"
value = digitalocean_vpc.app_vpc.ip_range
}
}
# Postgres firewall (allow connections from whitelisted IPs)
resource "digitalocean_database_firewall" "whitelisted-fw" {
for_each = toset(var.db_allowed_ips)
cluster_id = digitalocean_database_cluster.app.id
rule {
type = "ip_addr"
value = each.key
}
}
然而,似乎每个集群只能拥有一个防火墙资源,因为只有最后一个 IP 被保存并显示在仪表板上。
我也试过在 rule
块中使用 for_each
但这会引发一个错误,它只能出现在模块或资源块中。
我也试过直接将列表传递给 value
,但它只支持字符串而不支持列表。
如何为 var.db_allowed_ips
和 digitalocean_vpc.app_vpc.ip_range
中的每个 IP 添加一个 rule { }
块?
您可以通过 dynamic block:
resource "digitalocean_database_firewall" "whitelisted-fw" {
cluster_id = digitalocean_database_cluster.app.id
dynamic "rule" {
for_each = toset(var.db_allowed_ips)
content {
type = "ip_addr"
value = each.value
}
}
}
我相信 for_each
meta-argument 在动态块范围内接受 list(string)
的值,但是为了安全并使用到 [=13= 的正常类型转换,不会丢失任何内容].
我正在尝试设置 Digital Ocean Database Firewall,它使用以下语法:
resource "digitalocean_database_firewall" "example-fw" {
cluster_id = digitalocean_database_cluster.app.id
rule {
type = "ip_addr"
value = "192.168.1.1"
}
rule {
type = "ip_addr"
value = "192.0.2.0"
}
}
我有一个变量,它是应该添加到防火墙的白名单 IP 列表,以及 VPC IP 块。我首先尝试使用 for_each
:
# Postgres firewall (only allow connection inside VPC)
resource "digitalocean_database_firewall" "vpc-fw" {
cluster_id = digitalocean_database_cluster.app.id
rule {
type = "ip_addr"
value = digitalocean_vpc.app_vpc.ip_range
}
}
# Postgres firewall (allow connections from whitelisted IPs)
resource "digitalocean_database_firewall" "whitelisted-fw" {
for_each = toset(var.db_allowed_ips)
cluster_id = digitalocean_database_cluster.app.id
rule {
type = "ip_addr"
value = each.key
}
}
然而,似乎每个集群只能拥有一个防火墙资源,因为只有最后一个 IP 被保存并显示在仪表板上。
我也试过在 rule
块中使用 for_each
但这会引发一个错误,它只能出现在模块或资源块中。
我也试过直接将列表传递给 value
,但它只支持字符串而不支持列表。
如何为 var.db_allowed_ips
和 digitalocean_vpc.app_vpc.ip_range
中的每个 IP 添加一个 rule { }
块?
您可以通过 dynamic block:
resource "digitalocean_database_firewall" "whitelisted-fw" {
cluster_id = digitalocean_database_cluster.app.id
dynamic "rule" {
for_each = toset(var.db_allowed_ips)
content {
type = "ip_addr"
value = each.value
}
}
}
我相信 for_each
meta-argument 在动态块范围内接受 list(string)
的值,但是为了安全并使用到 [=13= 的正常类型转换,不会丢失任何内容].