Files
vps-k8s/stoat/rabbit.tf
T
2026-02-16 19:26:47 +01:00

115 lines
2.3 KiB
Terraform

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
}
}
}
}
}
}