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

查看:118
本文介绍了遍历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天全站免登陆