Terraform:如何迭代通过json文件输入的地图的键值对

问题描述

这是我输入的json文件:

{
  "inputs": [
        {
          "acct_id": "foo-bar-15","display_name": "foo bar","project-role-pairs": {"test-1234": "roles/logging.logWriter","test-2345": "roles/storage.objectViewer"}
        },{
          "acct_id": "foo-bar-16","display_name": "john doe","project-role-pairs": {"test-3456": "roles/logging.logWriter","test-4567": "roles/storage.objectViewer"}
        }
      ]
}

代码: 这是我的代码,基于输入在GCP中创建服务帐户(该部分工作正常)。它还尝试根据上面的json文件中的project-roles-pairs映射在2个项目中创建IAM角色。我无法浏览地图。我根本不知道为什么。就目前而言,代码只是将映射中的第一个键用于两者,就好像没有第二对键值一样。我一直在寻找“扁平化”的动态块和setproduct。它们似乎不适合用例,或者我无法有效使用它们。请帮忙。

locals {
  json_data_7 = jsondecode(file("./data7.json"))
}


# Creates a Service Account for each top level in input
resource "google_service_account" "service_accounts_for_each_7" {
  for_each = {for v in local.json_data_7.inputs: v.acct_id => v.display_name}
  account_id   = each.key
  display_name = each.value
}

# 
resource "google_project_iam_member" "rolebinding" {
  for_each     = { for v in local.json_data_7.inputs: v.acct_id => v }
  project = element(keys(each.value.project-role-pairs),0)  #ONLYfirst key in MAP,not what I want,I would like this part loop through map and create a role for each KV-pair in JSON input
  role    = lookup(each.value.project-role-pairs,element(keys(each.value.project-role-pairs),0))
  member  = "serviceAccount:${google_service_account.service_accounts_for_each_7[each.key].email}"
}

问题:

如何使我的代码遍历JSON文件中输入的两个键值对:project-roles-pairs?谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)