Terraform .12嵌套循环

问题描述

variables.tf

variable "teams" {
  type        = map(any)
  default     = {}
}

input_value:

teams = {
    {
      team_id    = "abc"
      role_names = ["owner"]
    },{
      team_id    = "bcd"
      role_names = ["read","write"]
    }
  }
}

main.tf:

resource "mongodbatlas_project" "project" {
  name   = "testing"
  org_id = "123456"
    dynamic "teams" {
        for_each = var.teams
    
        content {
          id    = teams.value.team_id
          names = [teams.value.role_names]
        }
      }
}

我一直在尝试上面的代码,但是它不起作用。有没有更简单的方法将嵌套团队值分配给变量?

解决方法

teams变量对我来说似乎不正确,并且存在语法错误(例如,}中有额外的teams)。我认为应该是list,而不是map

variable "teams" {
  type        = list(any)
  default     = []
}

然后

teams = [
    {
      team_id    = "abc"
      role_names = ["owner"]
    },{
      team_id    = "bcd"
      role_names = ["read","write"]
    }
  ]

那么您的资源可能是:

resource "mongodbatlas_project" "project" {

  name   = "testing"
  org_id = "123456"

  dynamic "teams" {
    for_each = toset(var.teams)
    
    content {
       id    = teams.value.team_id
       names = teams.value.role_names
    }
 }

}

使用dynamic blocks时,迭代器的调用与块名相同。