Terraform报错:azuredevops_group含for_each需访问特定实例
解决Terraform中for_each资源的输出报错问题
报错原因
你遇到的错误是因为azuredevops_group.group启用了for_each,此时该资源不再是单个对象,而是一个键值对映射(键为var.object_ids中的每个元素)。直接通过azuredevops_group.group.origin_id访问属性会失败,因为Terraform无法确定你要访问哪个实例的属性。
修正模块内的输出定义
针对for_each创建的资源,需要用for表达式遍历所有实例,将属性整理为映射或列表输出。修改模块内的输出代码如下:
output "group_origin_ids" { value = { for origin_id, group in azuredevops_group.group : origin_id => group.origin_id } } output "group_ids" { value = { for origin_id, group in azuredevops_group.group : origin_id => group.id } }
这里输出的是键值对映射,键对应传入的object_ids元素,值对应资源的origin_id或id属性,结构清晰且符合for_each的资源特性。
调整调用模块后的本地变量
由于你的module "groups"也使用了for_each(基于local.all_groups循环),调用时需要遍历所有模块实例并合并输出结果。修改本地变量定义:
locals { group_ids = merge([ for group_name, group_mod in module.groups : group_mod.group_origin_ids ]...) group_ids_x = merge([ for group_name, group_mod in module.groups : group_mod.group_ids ]...) }
merge函数会把所有模块实例输出的映射合并为一个大的映射,方便后续使用。
补充说明
你之前尝试的origin_id[*]是针对count参数创建的资源(列表类型)的写法,而for_each创建的是映射类型,必须用for表达式来遍历处理,这是两种循环方式的核心区别。
内容的提问来源于stack exchange,提问作者play_something_good
相关产品推荐
相关产品推荐

