Terraform 地形-在嵌套地图上迭代

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"],

我正在尝试使用资源-google\u Bigquery\u dataset\u IAM\u绑定为Bigquery数据集创建IAM绑定。要求是我使用以下结构的变量读取此资源中的参数(dataset_id、角色、成员)-

  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”}
这使它变得如此简单。我正是想得到它的。非常感谢!!