我在 terraform 模块中有两个列表...
cidr_blocks = ["1.2.3.4/32","5.6.7.8/32"]
我还有另一个网络 ACL 设置列表
ingress_ports = [
{
from_port = 80
to_port = 80
protocol = "tcp"
},
{
from_port = 443
to_port = 443
protocol = "tcp"
},
{
from_port = 22
to_port = 22
protocol = "tcp"
}
]
我想将这些列表连接在一起,以便我可以使用生成的列表来创建网络 ACL。
result = [
{
cidr_block = "1.2.3.4/32"
from_port = 80
to_port = 80
protocol = "tcp"
},
{
cidr_block = "1.2.3.4/32"
from_port = 443
to_port = 443
protocol = "tcp"
},
{
cidr_block = "1.2.3.4/32"
from_port = 22
to_port = 22
protocol = "tcp"
},
{
cidr_block = "5.6.7.8/32"
from_port = 80
to_port = 80
protocol = "tcp"
},
{
cidr_block = "5.6.7.8/32"
from_port = 443
to_port = 443
protocol = "tcp"
},
{
cidr_block = "5.6.7.8/32"
from_port = 22
to_port = 22
protocol = "tcp"
}
]
这种事情在 Terraform 中可能吗?
最佳答案
在 terraform 0.12 中,我们终于可以使用 setproduct这使得这项工作变得更加容易:
cronjobs = [
{
schedule_expression = "cron(5 0 * * ? *)"
command_and_arguments = ["app/aws-console.sh", "task1"]
description = "Hello World"
},
{
schedule_expression = "cron(0 5 1 * ? *)"
command_and_arguments = ["app/aws-console.sh", "task2"]
description = "Send Bills"
}
]
environments = ["dev", "stage"]
locals {
cronjobs_for_all_environments = setproduct(var.cronjobs, var.environments)
}
resource "aws_cloudwatch_event_rule" "cronjob" {
count = length(local.cronjobs_for_all_environments)
name = "cronjob-${local.cronjobs_for_all_environments[count.index][1]}"
description = "${local.cronjobs_for_all_environments[count.index][0].description} (${local.cronjobs_for_all_environments[count.index][1]})"
schedule_expression = local.cronjobs_for_all_environments[count.index][0].schedule_expression
}
关于terraform - 在 Terraform 中生成具有两个列表的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48814646/