Use and create kubernetes providers dynamically for another module


I want to create several k8s clusters in different regions in GCP, which goes essentially like this (

locals {
  cluster_type = "simple-regional"

data "google_client_config" "default" {}

provider "kubernetes" {
  host                   = "https://${module.gke.endpoint}"
  token                  = data.google_client_config.default.access_token
  cluster_ca_certificate = base64decode(module.gke.ca_certificate)

module "gke" {
  source                 = "../../"
  project_id             = var.project_id
  name                   = "${local.cluster_type}-cluster${var.cluster_name_suffix}"
  regional               = true
  region                 = var.region
  network                =
  subnetwork             = var.subnetwork
  ip_range_pods          = var.ip_range_pods
  ip_range_services      = var.ip_range_services
  create_service_account = false
  service_account        = var.compute_engine_service_account
  skip_provisioners      = var.skip_provisioners

module "gke_auth" {
  source = "../../modules/auth"

  project_id   = var.project_id
  location     = module.gke.location
  cluster_name =

Now this works fine, also when I use a for_each loop to create several clusters. Now my next aim is to deploy via helm charts certain things into the clusters. For this, I wrote a module whose looks as follows:

resource "kubernetes_namespace" "example" {
  metadata {
    name = "my-first-namespace"

  provider = kubernetes

and I call that module in the primary as follows:

module "helm_general" {
  source = "../../modules/helm_general"

  depends_on = [time_sleep.wait]
  for_each = module.gke

  providers {
    kubernetes = provider "kubernetes" {
      cluster_ca_certificate = each.value.ca_certificate
      host                   =
      token                 = each.value.client_token

Yet, Terraform keeps telling me

│ Error: Missing newline after argument
│   on line 109, in module "helm_general":
│  109:     kubernetes = provider "kubernetes" {
│ An argument definition must end with a newline.

I already tried to bring in the credentials for each cluster as variables into the module and to setup the provider in the module, but Terraform kept telling me that providers cannot be instantiated in modules that are called with for_each.

Hence, my question is whether there is a way to do this dynamically as can deal with an unlimited number of k8s clusters and I do not want to write it down for each cluster explicitly in the file.

Many thanks for your input.