遍历 terraform 中的地图列表列表 [英] Iterate over list of list of maps in terraform

查看:22
本文介绍了遍历 terraform 中的地图列表列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑我有一个变量,它是地图列表的列表.

Consider I have a variable that is a list of list of maps.

示例:

    processes = [
      [
       {start_cmd: "a-server-start", attribute2:"type_a"}, 
       {start_cmd: "a-worker-start", attribute2:"type_b"}
       {start_cmd: "a--different-worker-start", attribute2:"type_c"}
      ],
      [
       {start_cmd: "b-server-start", attribute2:"type_a"},
       {start_cmd: "b-worker-start", attribute2:"type_b"}
      ]
    ]

在每次迭代中,我需要取出地图数组,然后遍历该数组并取出地图的值.我如何在 terraform 中实现这一点?

In each iteration, I need to take out the array of maps, then iterate over that array and take out the values of the map. How do I achieve this in terraform?

我考虑过两次计数并进行一些算术以欺骗 terraform 执行相似的嵌套迭代 在此处查看参考.但在我们的例子中,内部数组中的映射数量可能会有所不同.

I have considered having two counts and doing some arithmetic to trick terraform into performing a lookalike nested iteration Check reference here. But in our case the number of maps in the inner array can vary.

此外,我们目前正在使用 0.11 terraform 版本,但如果可以在该版本中实现这一点,请不要介意使用 alpha 0.12 版本的 terraform.

Also we are currently using the 0.11 terraform version but dont mind using the alpha 0.12 version of terraform if it is possible to achieve this in that version.

添加了我将如何使用这个变量:

Added how I would use this variable:

resource "create_application" "applications" {
  // Create a resource for every array in the variable processes. 2 in this case
  name        = ""              
  migration_command = "" 

  proc {                
    // For every map create this attribute for the resource.
    name    = ""                
    init_command   = "a-server-start"                   
    type   = "server"                
  }                                    
}                                      

不确定这是否能满足要求.如果还不清楚,请询问.

Not sure if this clears up the requirement. Please do ask if it is still not clear.

推荐答案

使用 terraform 0.12.x

Using terraform 0.12.x

locals {
  processes = [
    [
      { start_cmd: "a-server-start", type: "type_a", name: "inglorious bastards" },
      { start_cmd: "a-worker-start", type: "type_b", name: "kill bill" },
      { start_cmd: "a--different-worker-start", type: "type_c", name: "pulp fiction" },
    ],
    [
      { start_cmd: "b-server-start", type: "type_a", name: "inglorious bastards" },
      { start_cmd: "b-worker-start", type: "type_b", name: "kill bill" },
    ]
  ]
}

# just an example
data "archive_file" "applications" {
  count = length(local.processes)

  type = "zip"

  output_path = "applications.zip"

  dynamic "source" {
    for_each = local.processes[count.index]

    content {
      content  = source.value.type
      filename = source.value.name
    }
  }
}

$ terraform apply
data.archive_file.applications[0]: Refreshing state...
data.archive_file.applications[1]: Refreshing state...

Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

如果存在 create_application 资源,它可以像这样建模

If a create_application resource existed, it can be modeled like so

resource "create_application" "applications" {
  count             = length(local.processes)
  name              = ""
  migration_command = "" 

  dynamic "proc" {
    for_each = local.processes[count.index]

    content {
      name         = proc.value.name
      init_command = proc.value.start_cmd
      type         = proc.value.type
    }
  }
}

这篇关于遍历 terraform 中的地图列表列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆