resource "kubernetes_ingress_v1" "automatic_ingress" { for_each = { for key, value in var.kubernetes : key => value if value.service_port != null && value.enabled == true && value.docker != true && value.exposed == true } metadata { name = "${each.key}-ingress" namespace = coalesce(each.value.namespace, each.value.connected_namespace, each.key) } spec { ingress_class_name = "traefik" rule { host = join(".", [coalesce(each.value.domain_name, each.key), "geeraert.eu"]) http { path { path = "/" backend { service { name = "${each.key}-svc" port { number = each.value.service_port[0] #selecting the first of the list } } } } } } } } resource "kubernetes_service_v1" "automatic_service" { for_each = { for key, value in var.kubernetes : 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 : 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 : 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 } } } resource "docker_network" "terraform_network" { #avoiding this to create if the shunt_docker is on count = var.shunt_docker ? 0 : 1 name = "deployment_network" }