通过列表地图迭代?

时间:2017-03-03 11:26:49

标签: amazon-web-services terraform

我正在尝试设置一个通用且可自定义的模板。

因此,使用模块,我想迭代包含列表的地图,例如:

module "instance"
{
  ...

  ip_by_subnets = {
    subnet1 = [ip1,ip2]
    subnet2 = [ip3]
    subnet3 = []
    subnet4 = [ip4,ip5,ip6,...]
    }
  ...
}

其中

subnet# = a subnet cidr block
ip#     = private IP address

对于我需要运行的每个子网,并为每个私有ip创建一个实例。

psuedo代码基本上会这样做:

foreach subnet# in ip_by_subnets
    foreach ip# in list
       create an instance resource

但我无法弄清楚要放入资源模板的代码。 做了一些不好的尝试,例如。

subnet_id = "${element(var.ip_by_subnets[count.index])}"

但这不会正常工作。 我还想过在模块中使用count,但是我必须将elb移动到自己的模块中。我能做什么,但我先尝试这种方式

任何人都知道如何做到这一点? 对其他方法的任何建议(例如,赞赏不同的数据结构)

1 个答案:

答案 0 :(得分:0)

在Terraform 0.12发布之前,这似乎(不容易)可行。

0.12发行版包括For表达式以及许多其他改良网络。

{for s in var.list : s => upper(s)}
{
 "a" = "A" 
 "b" = "B" 
 "c" = "C"
}

未经测试,但可以想象它会像这样工作:

{for l in var.map : for s in var.list : s => upper(s)}
    {
     "a" = "A" 
     "b" = "B" 
     "c" = "C"
    }