【发布时间】:2021-01-17 17:33:31
【问题描述】:
这是我的输入 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 中输入的 2 个键值对?谢谢。
【问题讨论】:
标签: json foreach terraform terraform-provider-gcp