variable "kubernetes_input" { type = map(object({ docker = optional(bool) namespace = optional(string) connected_namespace = optional(string, "") service_port = optional(list(number)) service_type = optional(string, "ClusterIP") database = optional(map(string)) redis = optional(map(string)) enabled = optional(bool, true) })) } resource "kubernetes_service_v1" "automatic_service" { for_each = { for key, value in var.kubernetes_input : key => value if value.service_port != null && value.enabled == true && value.docker != true } metadata { name = "${each.key}-svc" namespace = coalesce(each.value.namespace, each.value.connected_namespace, each.key) labels = { deployment_method = "Terraform" } annotations = each.value.service_type == "LoadBalancer" ? { "metallb.universe.tf/ip-allocated-from-pool" = "first-pool" } : {} } spec { selector = { app = each.key } dynamic "port" { for_each = each.value.service_port != null ? each.value.service_port : [] content { port = port.value target_port = port.value name = replace("${port.value}${each.key}", "/(.{0,15})(.*)/", "$1") node_port = each.value.service_type == "NodePort" ? port.value : 0 } } type = each.value.service_type } } resource "kubernetes_service_v1" "automatic_service_database" { for_each = { for key, value in var.kubernetes_input : key => value if value.database != null && value.enabled == true && !(try(value.database.shunt, false)) && value.docker != true } metadata { name = "${each.key}-db-svc" namespace = coalesce(each.value.namespace, each.value.connected_namespace, each.key) labels = { deployment_method = "Terraform" #username = "${resource.bitwarden-secrets_secret.automatic_bitwarden_secret_password[each.key].key}" } } spec { selector = { app = "${each.key}-db" } port { port = try(each.value.database.port, 5432) target_port = try(each.value.database.port, 5432) } } } resource "kubernetes_service_v1" "automatic_service_redis" { for_each = { for key, value in var.kubernetes_input : key => value if value.redis != null && value.enabled == true && value.docker != true } metadata { name = "${each.key}-redis-svc" namespace = coalesce(each.value.namespace, each.value.connected_namespace, each.key) labels = { deployment_method = "Terraform" } } spec { selector = { app = "${each.key}-redis" } port { port = 6379 target_port = 6379 } } }