首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用两个不同的地图在gcp中创建资源的Terraform

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

Stack Overflow用户
提问于 2021-09-07 12:31:09
回答 1查看 48关注 0票数 1

我们正在尝试将组分配到gcp中的项目下的特定角色。我们有一个定义的gcp项目相关变量的映射

代码语言:javascript
复制
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"
  }
}

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

代码语言:javascript
复制
role_bind = {
  "billing_admin" = {
   name = "roles/billing.admin"
   member = ["group:gcp-******"]
  }
   "billing_viewer" = {
   name = "roles/billing.viewer"
   member = ["group:gcp-******"]
  }
}

我们希望使用映射变量project_details来使用google_project_iam_member资源遍历项目id

喜欢

代码语言:javascript
复制
    for_each = var.project_details 

    project = each.value.project_id

然后,对于每个项目id,我们希望使用另一个映射变量role_bind来分配角色。

我们可以通过任何方式( for_each中的for_each )实现这一点吗?任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 13:52:56

Terraform不支持嵌套for each或嵌套计数。通常有两种方法可以做到这一点,一种是使用len(var.role_bind) * len(varproject_details)计数并使用模数查找元素,另一种是使用嵌套的理解。嵌套的理解更具可读性,因此让我们使用它:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69088303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档