首页 > 解决方案 > Terraform 条件迭代

问题描述

我想创建一个dynamic资源,for_each我也想实现一个资源创建条件,但是由于某种我不明白的原因,资源创建条件没有按预期工作。

逻辑很简单:我有一个对象列表,每个对象都是资源,因此在每个对象中都有一个bool可以创建资源的变量。

resource "aws_autoscaling_group" "aws_asg"  {
   for_each = { for key, value in var.parameters : key => value if flatten([ for x in var.parameters : x.init ]) }
}

中的问题flatten([ for x in var.parameters : x.init ]),资源采用第一个元素,并忽略下一个元素:

  + x = [
      + true,
      + false,
    ]

这是var.parameters

   parameters = [
       # Runner 1
       {
            init    = true
            name    = "test-runner-1"

            scaling = {
                    desired     = 3
                    maximum     = 9
                    minimum     = 3
            }
       },

       # Runner 2
       {
            init    = false
            name    = "test-runner-2"

            scaling = {
                    desired     = 3
                    maximum     = 9
                    minimum     = 3
            }
       }
   ]
}

知道如何将每个布尔值映射到资源创建吗?

标签: amazon-web-servicesterraformterraform-provider-aws

解决方案


如果你想有条件地循环你的parameters,那么它应该是:

resource "aws_autoscaling_group" "aws_asg"  {
   for_each = { for key, value in var.parameters : key => value if value.init }
}

推荐阅读