Terraform - 迭代嵌套地图

2023-11-27

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

  bq_iam_role_bindings = {
    "member1" = {
      "dataset1" : ["role1","role2", "role5"],
      "dataset2" : ["role3","role2"],
    },
    "member2" = {
      "dataset3" : ["role1","role4"],
      "dataset2" : ["role5"],
    } 
  }

因此,我需要循环该变量并获取在数据集上为每个成员分配的角色。这里创建的总资源为八个(对于每个成员、每个数据集和每个角色)。 我是 terraform 的新手,只了解如何在地图上应用简单的 for 循环和在资源中应用 for_each 循环。想要了解我正在尝试做的事情怎么可能。

这是我发现的最接近的 -地形变量中的地图内的地图我可以在其中读取嵌套映射中的值,但在我的情况下我也需要提取密钥。 有人可以帮忙吗?


你可以将其重新组织成更多for_each友好的对象列表并将其存储在本地helper_list.

例如:

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_list形式为:

[
  {
    "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"
  },
]

上面的表格更容易使用for_each, e.g.:

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
  ]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Terraform - 迭代嵌套地图 的相关文章

随机推荐

  • WinForms 工具提示未显示

    我有一个 WinForms 应用程序 每个表单和用户控件都按如下方式设置其工具提示 in the control constructor var toolTip new ToolTip this Disposed o e gt toolTi
  • 如何处理 python WebDriver 中偶发的 BadStatusLine、CannotSendRequest 错误

    自从我们开始在 jenkins 中运行 selenium UI 测试以来 我们注意到测试期间出现少量但令人讨厌的错误频率 我们在看似随机的 selenium 操作 单击 退出 访问等 上收到 BadStatusLine 和 CannotSe
  • 同一 Matplotlib 标签中的多种字体大小

    我正在尝试做一些相对简单的事情 我希望能够增加一个字母的字体 例如 LaTeX 变量 例如 30 并保持标签中的其他字母为某种字体 例如 20 有人有快速的解决方案吗 对我来说这似乎相当复杂 我尝试使用 对于标签中的每个 项目 plt pl
  • 基于 Windows 7 上的 Perl

    我在 Windows 7 上安装了 Padre perl perl IDE 每次运行程序时 我都会收到一条错误消息 perl warning Setting locale failed perl warning Please check t
  • 从 jar 中提取 scala 源代码

    所以我有一个包含 scala 作为源代码的 jar 文件 但我丢失了原始代码 有没有办法将 jar 中的类文件转换为 scala 函数和类 而不是编译器生成的 java 类 我尝试过使用反编译器 但它只给我提供了零意义的java代码 先感谢
  • 无法显示 Highchart

    我对 Javascript Rails 和 JQuery 一起工作还很陌生 我正在 Highcharts 上阅读本教程 http www highcharts com documentation how to use installatio
  • spring-cloud 与ribbon/eureka/hystrix 使用restTemplate 无法设置连接/读取超时

    我已经使用 spring cloud 构建了一个 spring boot 应用程序 并希望在我的客户端应用程序 这也是一个微服务 中使用 RestTemplate 以便我可以继续使用mockMvc 进行集成测试 我正在使用默认的ribbon
  • 如何检测Facebook分享成功?使用 JavaScript

    此代码正在共享 facebook 但我想要如何检测 facebook 共享成功 我如何使用 javascript 做到这一点 u location href t document title var myWindow window open
  • 如何删除文本按钮的填充?

    我正在尝试从中删除填充TextButton但它不会起作用 TextButton onClick modifier Modifier padding 0 dp Text getString R string terms and conditi
  • 如何更改 RecyclerView 项目 onClick 的 viewType

    我创建了一个以 Cards 作为主要视图类型的 RecyclerView 我想要实现的是 当用户单击某个项目时 该项目的 ViewType 将从卡片更改为另一个 Viewtype 例如水平滚动的列表文本视图 我的 RecyclerView
  • 将 CSS 应用于活动路由器链接 [Angular 2]

    我想将特殊的 CSS 样式属性应用于活动路由器链接 a name a 这是我到目前为止所尝试的 使用默认的 router link active 类 router link active color 000 font weight bold
  • AttributeError:“属性”对象没有属性

    Python 2 6 似乎无缘无故地被破坏了 有人能看出这段代码有问题吗 class DB def doSomething self str print str class A db DB staticmethod def getDB re
  • 如何使用混淆器?

    我试图学习如何使用ProGuard 这并不像我想象的那么容易 一开始我找了一个简单的Java代码来尝试一下 简单的二类 Swing 计算器 可以通过该链接找到该代码 但我发现它太冗长了 无法将其发布到此处 无论如何 这是一个简单的应用程序
  • 手动修改 C++ 名称

    我正在写一个脚本IDA ProPython 中的反汇编器使用idapython插入 使用它 我能够填补 IDA 自动分析的不足之处 让我困惑的一个领域是用 漂亮的名字 因为缺乏更好的术语 来命名位置 功能 我的意思的一个例子如下所示 ida
  • 如何cd到名称中带有空格的目录?

    我正在尝试进入目录 cygdrive c Users my dir Documents DOCS cygdrive c Users my dir Documents echo DOCS cygdrive c Users my dir Doc
  • 获取从 getStaticProps 返回的组件中未定义的 props

    我已从 getStaticProps 返回 json 响应 控制台将其记录在 getStaticProps 中以验证正确的 json 响应 所以 fetch 工作正常 我从 API 得到了正确的响应 import Layout from c
  • Maven 在调用时不会替换“settings.xml”中的变量

    我在settings xml文件中为所有存储库定义了本地镜像
  • JPA(Hibernate、EclipseLink)映射:为什么此代码不起作用(使用 JPA 2.0、@EmbeddedId 复合 PK-FK 的 2 个关系链)?

    我有三张桌子 CREATE TABLE PostAddresses contact id INTEGER NOT NULL ordinal nbr SMALLINT NOT NULL PRIMARY KEY contact id ordin
  • 为 WP7 构建 .NET dll

    如何将 C dll 移植到 WP7 我在桌面上成功构建了 dll 源代码 但是当我尝试在 WP7 项目上引用 dll 时 出现以下错误 无法将引用添加到 c path to my dll 因为它不是使用构建的 Windows Phone 运
  • Terraform - 迭代嵌套地图

    我正在尝试使用资源 google bigquery dataset iam binding 为 Bigquery 数据集创建 IAM 绑定 要求是我使用以下结构的变量读取此资源中的参数 dataset id 角色 成员 bq iam rol