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
和计数。
我们正在尝试将组分配给 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
和计数。