Terraform读取YAML嵌套角色列表,解决for_each与count冲突实现资源遍历
解决方案
你需要先将YAML配置中每个授权项的roles列表展开,生成「单条授权对应单个角色」的扁平结构,再基于该结构遍历创建资源即可。count和for_each是Terraform中互斥的元参数,不能同时在同一个资源块中使用。
步骤1:调整本地变量,生成展平后的授权列表
locals { acs = yamldecode(file("./access.yaml")) # 展开授权配置,每个角色对应一条独立的授权记录 flattened_grants = flatten([ for grant in local.acs.grants : [ for role in grant.roles : { database_name = grant.databasename schema_name = grant.schemaname privilege = grant.privilege role = role # 构造唯一标识作为for_each的键,避免列表顺序变化导致资源意外重建 id = "${grant.databasename}_${grant.schemaname}_${grant.privilege}_${role}" } ]) }
步骤2:修改资源块的遍历逻辑
resource "snowflake_schema_grant" "grant" { for_each = { for fg in local.flattened_grants : fg.id => fg } database_name = each.value.database_name schema_name = each.value.schema_name privilege = each.value.privilege # 单个角色传入单元素列表即可匹配资源参数要求 roles = [each.value.role] }
调整后会生成你期望的4条独立授权资源,完全匹配你列出的配置要求。
内容的提问来源于stack exchange,提问作者Bala Murali
相关产品推荐
相关产品推荐

