/**
 * Copyright 2022 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

# tfdoc:file:description GKE nodepools.

locals {
  nodepools = merge([
    for cluster, nodepools in var.nodepools : {
      for nodepool, config in nodepools :
      "${cluster}/${nodepool}" => merge(config, {
        name    = nodepool
        cluster = cluster
      })
    }
  ]...)
}

module "gke-nodepool" {
  source               = "../../../modules/gke-nodepool"
  for_each             = local.nodepools
  name                 = each.value.name
  project_id           = module.gke-project-0.project_id
  cluster_name         = module.gke-cluster[each.value.cluster].name
  location             = module.gke-cluster[each.value.cluster].location
  gke_version          = each.value.gke_version
  labels               = each.value.labels
  max_pods_per_node    = each.value.max_pods_per_node
  node_config          = each.value.node_config
  node_count           = each.value.node_count
  node_locations       = each.value.node_locations
  nodepool_config      = each.value.nodepool_config
  pod_range            = each.value.pod_range
  reservation_affinity = each.value.reservation_affinity
  service_account = (
    each.value.service_account == null
    ? { email = module.gke-nodes-service-account.email }
    : each.value.service_account
  )
  sole_tenant_nodegroup = each.value.sole_tenant_nodegroup
  tags                  = each.value.tags
  taints                = each.value.taints
}
