Terraform模块返回值异常:预期列表映射却得单元素元组
Terraform返回列表映射失败,得到单元素元组的解决方法
你的问题出在多套了一层列表语法。var.assignment_policies[*].requestor_settings.requestor本身通过splat表达式,已经返回了一个列表的列表(因为每个assignment_policy里的requestor都是列表),你再用[]把它包起来,就变成了一个只包含这个列表的元组(或列表),所以才会显示local.requestors is list of tuple with 1 element。
针对你的场景,分两种情况解决:
情况1:合并所有policy的requestor为一个列表映射
如果assignment_policies以后可能有多个元素,想把所有policy里的requestor合并成一个大的列表映射,用flatten函数:
locals { requestors = flatten(var.assignment_policies[*].requestor_settings.requestor) }
这样处理后,local.requestors就是包含两个映射的列表,符合你的预期。
情况2:仅取第一个policy的requestor
如果确定assignment_policies永远只有一个元素,直接索引访问第一个元素的requestor即可:
locals { requestors = var.assignment_policies[0].requestor_settings.requestor }
这样得到的就是你想要的包含两个映射的列表。
验证一下,用你提供的assignment_policies值,两种方法都会返回:
[ { object_id = "test-grp-3" subject_type = "groupMembers" }, { object_id = "example@example.com" subject_type = "singleUser" } ]
内容的提问来源于stack exchange,提问作者Joseph Leiber
相关产品推荐
相关产品推荐

