I have the following input in terraform, but couldn’t able to generate to desired output.
I dont see any option in tf to filter by field [resource_app_id] in “for” loop.
Stuck on this for past couple of days . Any help is appreciated!!!
input_data = [
{
"resource_app_id" = "62ec2d38-2d53-4204-989b-053a65534873"
"id" = "b43b06f7-92d1-0a98-bcc5-b6d13557fafd"
"Type" = "Role"
},
{
"resource_app_id" = "62ec2d38-2d53-4204-989b-053a65534873"
"id" = "019aa34d-20ce-f301-586c-c5a1cbe410cf"
"type" = "Role"
},
{
"resource_app_id" = "193b6dcb-1323-4f56-8dc5-eed6f9a2789e"
"id" = "c72de1fc-b40d-4bfc-a08a-79a23c486cc7"
"type" = "Role"
},
]
Desired output
requiredResourceAccess": [
{
"resourceAppId": "62ec2d38-2d53-4204-989b-053a65534873",
"resourceAccess": [
{
"id": "b43b06f7-92d1-0a98-bcc5-b6d13557fafd",
"type": "Role"
},
{
"id": "019aa34d-20ce-f301-586c-c5a1cbe410cf",
"type": "Role"
}
]
},
{
"resourceAppId": "193b6dcb-1323-4f56-8dc5-eed6f9a2789e",
"resourceAccess": [
{
"id": "c72de1fc-b40d-4bfc-a08a-79a23c486cc7",
"type": "Role"
}
]
}
Hi @mukeshinit ,
The following Terraform configuration should work. I’ve attached the output below the config.
This approach uses ...
to group together results that have a common key rather than filter by field, but produces the result that you want. There’s a typo in your input_data
, the first item uses Type
instead of type
for one of the keys.
Hope this helps!
variable "initial" {
default = [
{
"resource_app_id" = "62ec2d38-2d53-4204-989b-053a65534873"
"id" = "b43b06f7-92d1-0a98-bcc5-b6d13557fafd"
"type" = "Role"
},
{
"resource_app_id" = "62ec2d38-2d53-4204-989b-053a65534873"
"id" = "019aa34d-20ce-f301-586c-c5a1cbe410cf"
"type" = "Role"
},
{
"resource_app_id" = "193b6dcb-1323-4f56-8dc5-eed6f9a2789e"
"id" = "c72de1fc-b40d-4bfc-a08a-79a23c486cc7"
"type" = "Role"
},
]
}
locals {
middle = { for i in var.initial: i["resource_app_id"] => i... }
}
output "middle" {
value = local.middle
}
output "desired" {
value = [
for k, v in local.middle: {
"resourceAppId": k,
"resourceAccess": [ for rav in v: {
"id": rav["id"],
"type": rav["type"],
}]
}
]
}
Results:
Outputs:
desired = [
{
"resourceAccess" = [
{
"id" = "c72de1fc-b40d-4bfc-a08a-79a23c486cc7"
"type" = "Role"
},
]
"resourceAppId" = "193b6dcb-1323-4f56-8dc5-eed6f9a2789e"
},
{
"resourceAccess" = [
{
"id" = "b43b06f7-92d1-0a98-bcc5-b6d13557fafd"
"type" = "Role"
},
{
"id" = "019aa34d-20ce-f301-586c-c5a1cbe410cf"
"type" = "Role"
},
]
"resourceAppId" = "62ec2d38-2d53-4204-989b-053a65534873"
},
]
middle = {
"193b6dcb-1323-4f56-8dc5-eed6f9a2789e" = [
{
"id" = "c72de1fc-b40d-4bfc-a08a-79a23c486cc7"
"resource_app_id" = "193b6dcb-1323-4f56-8dc5-eed6f9a2789e"
"type" = "Role"
},
]
"62ec2d38-2d53-4204-989b-053a65534873" = [
{
"id" = "b43b06f7-92d1-0a98-bcc5-b6d13557fafd"
"resource_app_id" = "62ec2d38-2d53-4204-989b-053a65534873"
"type" = "Role"
},
{
"id" = "019aa34d-20ce-f301-586c-c5a1cbe410cf"
"resource_app_id" = "62ec2d38-2d53-4204-989b-053a65534873"
"type" = "Role"
},
]
}
1 Like
Thank you so much for the help and prompt reply … This resolved my issue !!!
1 Like