Terraform 每个单元嵌套的地形

Terraform 每个单元嵌套的地形,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我对地形很陌生,可能我想要的太多了。。。但情况是这样的 这是我的.tfvars(的一部分)中的内容 在模板中,我有以下代码 module "st_create" { for_each = var.resources_st source = "../../_modules/general/st_create" st_name_site_region = each.value["st_name_sit

我对地形很陌生,可能我想要的太多了。。。但情况是这样的 这是我的.tfvars(的一部分)中的内容

在模板中,我有以下代码

module "st_create" {
      for_each = var.resources_st
      source = "../../_modules/general/st_create"
    
      st_name_site_region   = each.value["st_name_site_region"]
      st_name_application   = each.value["st_name_application"]
      st_name_role          = each.value["st_name_role"]
      st_name_seqnr         = each.value["st_name_seqnr"]
      st_name_purpose       = each.value["st_name_purpose"]
    ...
      st_blob_contributor_role_aadgroups = each.value["st_blob_contributor_role_aadgroups"]
    ...
    }
这很好,但现在我想创建角色并分配aad组,因此在我的伪逻辑中,我看到了以下步骤

所以我要补充一点

locals {
  st_blob_contributor_role_aadgroups = flatten([
    for st_key, st in var.resources_st : [
      for rbac_key, rbac in st.st_blob_contributor_role_aadgroups : {
        st_key            = st_key
        rbac_key          = rbac_key
        role_display_name = rbac.display_name
        role_role         = rbac.role 
      }
    ]
  ])
}
但我不知道如何继续下去。 我可以做第二个模块并循环扁平结构,但是我会在这个结构中得到存储帐户的ID吗


恐怕我混淆了这一点,但找不到代表我所想的一点的样本……

每个
的两个主要要求是:

  • 您有一个集合,每个要声明的资源实例有一个元素
  • 您可以为每个元素派生某种唯一的字符串键,这些键在计划时是完全已知的
它看起来像是您在
locals中的列表。st_blob_contributor_roleaadgroups
满足这些要求,因此它适合用作每个
基础,但需要进行一些额外的转换,才能将其转换为一个映射,其中每个元素的唯一字符串是键:

module "example" {
  source = "../../_modules/example"
  for_each = {
    for obj in locals.st_blob_contributor_roleaadgroups : "${obj.st_key}:${obj.rbac_key}" => obj
  }

  # ...
}
在此
模块
块内,您可以使用
每个.value
引用当前对象,例如
每个.value.display\u name
获取显示名称。模块的每个实例都将通过
st_键
rbac_键
属性的串联来标识,这些属性必须是唯一的,因为它们最初来自两个不同映射的键

module "example" {
  source = "../../_modules/example"
  for_each = {
    for obj in locals.st_blob_contributor_roleaadgroups : "${obj.st_key}:${obj.rbac_key}" => obj
  }

  # ...
}