Terraform 在 gcp 中使用两个不同的地图创建资源

Terraform Using two different map's for resource creation in gcp

我们正在尝试将组分配给 gcp 项目下的特定角色。我们为 gcp 项目相关变量定义了地图

project_details = {
  "test-project-1" = {
    project_id   = "test-project-1"
    project_name = "test-project-1"
  }
   "test-project-2" = {
    project_id   = "test-project-2"
    project_name = "test-project-2"
  }
}

我们有另一个定义了角色和成员的地图,这是非常静态的。

role_bind = {
  "billing_admin" = {
   name = "roles/billing.admin"
   member = ["group:gcp-******"]
  }
   "billing_viewer" = {
   name = "roles/billing.viewer"
   member = ["group:gcp-******"]
  }
}

我们想使用 google_project_iam_member 资源来循环使用映射变量 project_details

的项目 ID

喜欢

    for_each = var.project_details 

    project = each.value.project_id

然后对于每个项目 ID,我们希望使用其他地图变量分配角色 role_bind。

我们可以通过任何方式实现吗(for_each 在 for_each 之内)?任何帮助将不胜感激。

Terraform 不支持 nested for each 或 nested count。通常完成此操作的两种方法是使用 len(var.role_bind) * len(varproject_details) 的计数并使用模数查找元素,或者使用嵌套理解。嵌套理解更具可读性,所以让我们开始吧:

locals {
    project_role = flatten([for pi : project in var.project_details : 
        [ for ri : role in var.role_details {
            rolename    = role.name
            projectname = project.project_name
            projectid   = project.project_id
            member      = role.member
        }]
    ])
}

然后你会在你的语句中使用 local.project_role 和计数。