variable "kubernetes_input" { type = map(object({ name = optional(string) docker = optional(bool) image = string pvc = optional(map(object({ name = optional(string) config_map = optional(bool, false) secret = optional(bool, false) local_path = optional(bool, false) host_path = optional(string) storage_class_name = optional(string, "nfs-storage-intelligent") annotations_fileType = optional(string) mount_path = string sub_path = optional(string) }))) environment = optional(map(object({ name = optional(string) value = optional(string) value_from = optional(object({ secret_key_ref = object({ name = string key = optional(string, null) }) })) }))) replicas = optional(number, 1) namespace = optional(string) connected_namespace = optional(string, "") command = optional(list(string)) service_port = optional(list(number)) external_port = optional(bool, false) service_type = optional(string, "ClusterIP") service_name = optional(string) domain_name = optional(string) legacy_domain = optional(bool, false) exposed = optional(bool, true) liveness_tcp_socket = optional(number) liveness_http_get = optional(string) liveness_http_get_path = optional(string) database = optional(map(string)) database_command = optional(list(string)) database_args = optional(list(string)) redis = optional(map(string)) enabled = optional(bool, true) secret_ref = optional(list(string)) config_map_ref = optional(list(string)) config_map_import = optional(list(string)) secret_import = optional(list(string)) extra_manifest = optional(list(string)) requirements = optional(map(string)) dns_nameservers = optional(string) service_account_name = optional(string) environment_variables = optional(map(string), { name = "value" }) security_context = optional(bool, false) })) } 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 } } }