问题描述
考虑一下,我有一个变量,它是地图列表的列表.
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中的地图列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!