resource "kubernetes_deployment_v1" "database-automatic" { 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 { namespace = coalesce(each.value.namespace, each.value.connected_namespace, each.key) name = "${coalesce(each.value.name, each.key)}-db" labels = { app = each.key deployment_method = "Terraform" database = "true" } } spec { replicas = each.value.replicas selector { match_labels = { app = "${each.key}-db" } } template { metadata { labels = { app = "${each.key}-db" deployment_method = "Terraform" database = "true" } } spec { container { image = try(each.value.database.image, "docker.io/library/postgres:latest") name = "${coalesce(each.value.name, each.key)}-db" port { container_port = 5432 name = "database-port" } volume_mount { mount_path = try(each.value.database.mountPath, "/var/lib/postgresql/") name = "${each.key}-db-pvc" } dynamic "volume_mount" { for_each = try(each.value.database.engine == "sqlserver", false) && !(try(each.value.database.shunt, false)) ? [1] : [] content { mount_path = "/backup" name = "${each.key}-db-backup" } } command = try([each.value.database.command], []) args = each.value.database_args != null ? each.value.database_args : [] dynamic "env_from" { for_each = each.value.database != null && each.value.enabled == true && !(try(each.value.database.shunt, false)) ? ["${each.key}-db-terraform"] : [] content { dynamic "secret_ref" { for_each = [1] content { name = env_from.value } } } } dynamic "env" { for_each = each.value.environment != null ? each.value.environment : {} content { name = env.key value = env.value.value != null ? env.value.value : null dynamic "value_from" { for_each = env.value.value_from != null ? env.value.value_from : {} content { dynamic "secret_key_ref" { for_each = [1] content { name = env.value.value_from.secret_key_ref.name key = env.value.value_from.secret_key_ref.key # optional = true } } } } } } } volume { name = "${each.key}-db-pvc" persistent_volume_claim { claim_name = "${each.key}-db-pvc" } } dynamic "volume" { for_each = try(each.value.database.engine == "sqlserver", false) && !(try(each.value.database.shunt, false)) ? [1] : [] content { name = "${each.key}-db-backup" persistent_volume_claim { claim_name = "${each.key}-db-backup" } } } } } } } resource "docker_container" "database-automatic" { 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 } image = try(each.value.database.image, "docker.io/library/postgres:latest") name = "${coalesce(each.value.name, each.key)}-db" hostname = "${coalesce(each.value.name, each.key)}-db" networks_advanced { name = docker_network.terraform_network.name } #no ports as they should be able to speak within the same network volumes { container_path = try(each.value.database.mountPath, "/var/lib/postgresql/") host_path = each.value.database.host_path } env = [ for key, value in(each.value.environment != null ? each.value.environment : {}) : "${key}=${value.value != null ? value.value : ""}" ] }