Terraform Okta模块动态组可选配置问题求助
解决Terraform Okta模块分配组时的空元素错误
问题原因
你的app_groups变量默认值是[{}](包含一个空map的列表),当不需要分配组时,这个空map会被dynamic "group"块遍历,代码尝试访问group.value["id"],但空map中不存在该键,因此抛出索引无效的错误。
解决方案
1. 修正变量默认值
将app_groups的默认值改为空列表,避免传入无效的空map:
variable "app_groups" { description = "Groups assigned to app" type = list(map(any)) default = [] }
2. 过滤无效分组并处理可选字段
修改okta_app_group_assignments资源,只遍历包含有效id的分组,同时用lookup处理可选的priority字段:
resource "okta_app_group_assignments" "app" { app_id = okta_app_oauth.app.id dynamic "group" { # 仅遍历包含"id"键的分组,过滤空map或无效条目 for_each = [for g in var.app_groups : g if contains(keys(g), "id")] content { id = group.value["id"] # 用lookup处理可选的priority,不存在时返回null priority = lookup(group.value, "priority", null) } } }
3. 可选:控制资源是否创建(优化)
如果希望在没有分组时完全不创建okta_app_group_assignments资源,可以添加count参数:
resource "okta_app_group_assignments" "app" { # 当app_groups有有效条目时才创建资源 count = length([for g in var.app_groups : g if contains(keys(g), "id")]) > 0 ? 1 : 0 app_id = okta_app_oauth.app.id dynamic "group" { for_each = [for g in var.app_groups : g if contains(keys(g), "id")] content { id = group.value["id"] priority = lookup(group.value, "priority", null) } } }
说明
- 原错误的核心是默认值传入了空map,导致遍历过程中访问不存在的键
- 过滤逻辑确保只有包含
id的分组才会被处理,避免无效条目引发错误 lookup函数安全地获取可选的priority字段,防止类似的索引错误
内容的提问来源于stack exchange,提问作者Frendom
相关产品推荐
相关产品推荐

