variable "rabbit" { type = object({ app_name = optional(string, "rabbit") image = string version = string user = optional(string, "rabbit") port = optional(number, 5672) }) } resource "random_password" "rabbit" { length = 16 } resource "kubernetes_service_v1" "rabbit" { metadata { name = var.rabbit.app_name namespace = kubernetes_namespace_v1.stoat.metadata[0].name } spec { selector = { app = var.rabbit.app_name } port { port = var.rabbit.port target_port = var.rabbit.port } } } resource "kubernetes_persistent_volume_claim_v1" "rabbit-data" { metadata { name = var.rabbit.app_name namespace = kubernetes_namespace_v1.stoat.metadata[0].name } spec { storage_class_name = "local-path" access_modes = ["ReadWriteOnce"] resources { requests = { storage = "1Gi" } } } } resource "kubernetes_config_map_v1" "rabbit_env" { metadata { name = "${var.rabbit.app_name}-env" namespace = kubernetes_namespace_v1.stoat.metadata[0].name } data = { RABBITMQ_DEFAULT_USER = var.rabbit.user RABBITMQ_DEFAULT_PASS = random_password.rabbit.result } } resource "kubernetes_deployment_v1" "rabbit" { metadata { name = var.rabbit.app_name namespace = kubernetes_namespace_v1.stoat.metadata[0].name } spec { replicas = 1 selector { match_labels = { app = var.rabbit.app_name } } template { metadata { labels = { "app" = var.rabbit.app_name } } spec { container { name = var.rabbit.app_name image = "${var.rabbit.image}:${var.rabbit.version}" port { container_port = var.rabbit.port } env_from { config_map_ref { name = kubernetes_config_map_v1.rabbit_env.metadata[0].name optional = false } } volume_mount { name = "rabbit-data" mount_path = "/var/lib/rabbitmq" } } volume { name = "rabbit-data" persistent_volume_claim { claim_name = kubernetes_persistent_volume_claim_v1.rabbit-data.metadata[0].name } } } } } }