Terraform 地形-在嵌套地图上迭代
我正在尝试使用资源-google\u Bigquery\u dataset\u IAM\u绑定为Bigquery数据集创建IAM绑定。要求是我使用以下结构的变量读取此资源中的参数(dataset_id、角色、成员)-Terraform 地形-在嵌套地图上迭代,terraform,nested-loops,terraform-provider-gcp,nested-map,Terraform,Nested Loops,Terraform Provider Gcp,Nested Map,我正在尝试使用资源-google\u Bigquery\u dataset\u IAM\u绑定为Bigquery数据集创建IAM绑定。要求是我使用以下结构的变量读取此资源中的参数(dataset_id、角色、成员)- bq_iam_role_bindings = { "member1" = { "dataset1" : ["role1","role2", "role5"],
bq_iam_role_bindings = {
"member1" = {
"dataset1" : ["role1","role2", "role5"],
"dataset2" : ["role3","role2"],
},
"member2" = {
"dataset3" : ["role1","role4"],
"dataset2" : ["role5"],
}
}
因此,我需要循环这个变量,并在数据集上为每个成员分配角色。这里创建的资源总数为八(对于每个成员、每个数据集和每个角色)。
我不熟悉地形,只知道如何在地图上应用简单for循环,以及如何在资源中应用每个for_循环。想知道我想做的事情是如何可能的
这是我找到的最接近的一个,在这里我可以读取嵌套映射中的值,但在我的例子中我还需要提取密钥。
任何人都可以在此提供帮助。您可以为每个对象重新组织更多的
友好对象列表,并将其存储在本地帮助者列表中
例如:
variable "bq_iam_role_bindings" {
default = {
"member1" = {
"dataset1" : ["role1","role2", "role5"],
"dataset2" : ["role3","role2"],
},
"member2" = {
"dataset3" : ["role1","role4"],
"dataset2" : ["role5"],
}
}
}
locals {
helper_list = flatten([for member, value in var.bq_iam_role_bindings:
flatten([for dataset, roles in value:
[for role in roles:
{"member" = member
"dataset" = dataset
"role" = role}
]])
])
}
这将导致helper\u列表
,其形式如下:
[
{
"dataset" = "dataset1"
"member" = "member1"
"role" = "role1"
},
{
"dataset" = "dataset1"
"member" = "member1"
"role" = "role2"
},
{
"dataset" = "dataset1"
"member" = "member1"
"role" = "role5"
},
{
"dataset" = "dataset2"
"member" = "member1"
"role" = "role3"
},
{
"dataset" = "dataset2"
"member" = "member1"
"role" = "role2"
},
{
"dataset" = "dataset2"
"member" = "member2"
"role" = "role5"
},
{
"dataset" = "dataset3"
"member" = "member2"
"role" = "role1"
},
{
"dataset" = "dataset3"
"member" = "member2"
"role" = "role4"
},
]
对于每个
,上述表格更易于使用,例如:
resource "google_bigquery_dataset_iam_binding" "reader" {
for_each = { for idx, record in local.helper_list : idx => record }
dataset_id = each.value.dataset
role = each.value.role
members = [
each.value.member
]
}
这回答了你的问题吗?您需要“手动”迭代地图,
展平结果,然后在中为每个
使用该结果。但是我如何为每个成员、数据集和角色引用3个参数?您将在地图上迭代,地图的键是所有这三个参数的唯一组合(例如。“something | some|u data | some|u role”),而值将是结构的映射{member=“something”dataset_id=“some|u data”role=“some_role”}
这使它变得如此简单。我正是想得到它的。非常感谢!!