variable "minio" { type = object({ app_name = optional(string, "minio") image = string version = string user = string port = optional(number, 9000) }) } resource "random_password" "minio" { length = 16 } resource "kubernetes_service_v1" "minio" { metadata { name = var.minio.app_name namespace = kubernetes_namespace_v1.stoat.metadata[0].name } spec { selector = { app = var.minio.app_name } port { port = var.minio.port target_port = var.minio.port } } } resource "kubernetes_config_map_v1" "minio_env" { metadata { name = "${var.minio.app_name}-env" namespace = kubernetes_namespace_v1.stoat.metadata[0].name } data = { MINIO_ROOT_USER = var.minio.user MINIO_ROOT_PASSWORD = random_password.minio.result MINIO_DOMAIN = "minio" } } resource "kubernetes_config_map_v1" "minio_creds" { metadata { name = "${var.minio.app_name}-creds" namespace = kubernetes_namespace_v1.stoat.metadata[0].name } data = { "creds.json" = templatefile("${path.module}/templates/minio_creds.json.tftpl", { minio_host = var.minio.app_name minio_user = var.minio.user minio_pass = random_password.minio.result }) } } resource "kubernetes_deployment_v1" "minio" { metadata { name = var.minio.app_name namespace = kubernetes_namespace_v1.stoat.metadata[0].name } spec { replicas = 1 selector { match_labels = { app = var.minio.app_name } } template { metadata { labels = { "app" = var.minio.app_name } } spec { container { name = var.minio.app_name image = "${var.minio.image}:${var.minio.version}" command = ["minio", "server", "/data"] port { container_port = var.minio.port } env_from { config_map_ref { name = kubernetes_config_map_v1.minio_env.metadata[0].name optional = false } } volume_mount { name = "minio-data" mount_path = "/data" } } container { name = "minio-cli" image = "minio/mc" command = ["/bin/sh", "-c", "--", "while true; do sleep 10; done"] volume_mount { name = "minio-creds" mount_path = "/creds.json" sub_path = "creds.json" } } volume { name = "minio-data" nfs { path = "/srv/nfs/minio" server = "10.42.0.1" read_only = false } } volume { name = "minio-creds" config_map { name = kubernetes_config_map_v1.minio_creds.metadata[0].name optional = false } } } } } } resource "kubernetes_deployment_v1" "minio_cli" { metadata { name = "minio-cli" namespace = kubernetes_namespace_v1.stoat.metadata[0].name } spec { replicas = 1 selector { match_labels = { app = "minio-cli" } } template { metadata { labels = { app = "minio-cli" } } spec { container { name = "minio-cli" image = "minio/mc" command = ["/bin/sh", "-c", "--", "while true; do sleep 10; done"] volume_mount { name = "minio-creds" mount_path = "/creds.json" sub_path = "creds.json" } } volume { name = "minio-creds" config_map { name = kubernetes_config_map_v1.minio_creds.metadata[0].name optional = false } } } } } }