google-cloud-platform - Terraform 在 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 不支持每个嵌套或嵌套计数。这通常完成的两种方法是使用计数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
在你的陈述中使用计数。