You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 11:54:03