Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Terraform-将列表列表转换为新列表_List_Terraform_Transform_Hcl - Fatal编程技术网

List Terraform-将列表列表转换为新列表

List Terraform-将列表列表转换为新列表,list,terraform,transform,hcl,List,Terraform,Transform,Hcl,在Terraform中,我需要转换输入数据结构,例如: vip_lists = [ ["1.0.1.1", "1.0.1.2", "1.0.1.3", "1.0.1.4"] ["1.0.2.1", "1.0.2.2", "1.0.2.3", "1.0.2.4"] ["1.0.0.1", &quo

在Terraform中,我需要转换输入数据结构,例如:

vip_lists = [
    ["1.0.1.1", "1.0.1.2", "1.0.1.3", "1.0.1.4"]
    ["1.0.2.1", "1.0.2.2", "1.0.2.3", "1.0.2.4"]
    ["1.0.0.1", "1.0.0.2", "1.0.0.3", "1.0.0.4"]
]
要产生如下输出:

vip_sets = [
    ["1.0.1.1", "1.0.2.1", "1.0.0.1"]
    ["1.0.1.2", "1.0.2.2", "1.0.0.2"]
    ["1.0.1.3", "1.0.2.3", "1.0.0.3"]
    ["1.0.1.4", "1.0.2.4", "1.0.0.4"]
]
因此,本质上,我需要获取列表的输入列表,并创建一个输出,该输出同样是列表列表的列表,但其第0个列表是输入中每个列表的第0个元素的列表……然后第1个列表也是如此,以此类推。 我无法预先知道输入中会有多少个列表,或者它们会有多长,但是如果有帮助的话,我们可以假设这些列表都是相同的长度


我已经尝试了几乎所有我能想到的东西,并在网上搜索过,但从那以后就没有运气了。欢迎提出所有建议

这有点可怕,但它可以工作(尽管我还没有测试如果
vip\u列表
为空,它会做什么。可能会崩溃,因为我正在索引
vip\u列表[0]
,而没有检查):


我曾经为一个模块编写过这个版本的列表,这些列表的长度不同,我们在其中使用了这样的转换,使用
count
创建了二维资源集。(当我们将它们转换为地图以与每个的ressource level
一起使用时,它们没有在atm中使用)

它可以处理动态列表大小,并以压缩或填充
null
值的方式输出:

Outputs:

compact = [
  [ "1.0.1.1", "1.0.2.1", "1.0.0.1" ],
  [ "1.0.1.4", "1.0.2.2", "1.0.0.3" ],
  [ "1.0.2.3", "1.0.0.4" ],
  [ "1.0.2.4" ],
]

matrix = [
  [ "1.0.1.1", "1.0.2.1", "1.0.0.1" ],
  [ "1.0.1.4", "1.0.2.2", "1.0.0.3" ],
  [ null,      "1.0.2.3", "1.0.0.4" ],
  [ null,      "1.0.2.4", null      ],
]

我知道答案已经被接受了,但也许有些人仍然可以使用这个动态版本。

太好了,非常感谢@carr0t,我真的很感激
$ terraform apply
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.

Outputs:

vip_sets = [
  [
    "1.0.1.1",
    "1.0.2.1",
    "1.0.0.1",
  ],
  [
    "1.0.1.2",
    "1.0.2.2",
    "1.0.0.2",
  ],
  [
    "1.0.1.3",
    "1.0.2.3",
    "1.0.0.3",
  ],
  [
    "1.0.1.4",
    "1.0.2.4",
    "1.0.0.4",
  ],
]
locals {
  matrix = [
    ["1.0.1.1", "1.0.1.4"],
    ["1.0.2.1", "1.0.2.2", "1.0.2.3", "1.0.2.4"],
    ["1.0.0.1", "1.0.0.3", "1.0.0.4"]
  ]

  row_lengths = [
    for row in local.matrix : length(row)
  ]

  max_row_length = max(0, local.row_lengths...)

  output = [
    for i in range(0, local.max_row_length) : [
      for j, _ in local.matrix : try(local.matrix[j][i], null)
    ]
  ]

  output_compact = [
    for i in range(0, local.max_row_length) : compact([
      for j, _ in local.matrix : try(local.matrix[j][i], null)
    ])
  ]
}

output "matrix" {
  value = local.output
}

output "compact" {
  value = local.output_compact
}
Outputs:

compact = [
  [ "1.0.1.1", "1.0.2.1", "1.0.0.1" ],
  [ "1.0.1.4", "1.0.2.2", "1.0.0.3" ],
  [ "1.0.2.3", "1.0.0.4" ],
  [ "1.0.2.4" ],
]

matrix = [
  [ "1.0.1.1", "1.0.2.1", "1.0.0.1" ],
  [ "1.0.1.4", "1.0.2.2", "1.0.0.3" ],
  [ null,      "1.0.2.3", "1.0.0.4" ],
  [ null,      "1.0.2.4", null      ],
]