terraform - 在 Terraform 中生成具有两个列表的笛卡尔积

标签 terraform

我在 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/

相关文章:

azure - 如何使用托管磁盘的托管 HSM 中存储的客户管理 key 启用服务器端加密?

azure - Terraform 利用传递到数据源的值

Azure Policy 拒绝特定角色定义 ID(角色)的角色分配

amazon-web-services - 尝试使用 Terraform 创建 AWS VPC 安全组时出现循环错误

terraform - AWS OptInRequired 和 Terraform

terraform - 如何以编程方式获取 Terraform 模块名称?

amazon-web-services - 如何将 sagemaker createApp 添加到用户配置文件执行角色?

aws-lambda - Terraform 无法将 API Gateway 更改部署到多个阶段中的一个阶段?

azure - Terraform 希望部署子网但禁用网络安全组

azure - 过滤azure terraform backend_address_pool输出,其中后端池的名称并获取id。