diff --git a/modules/kubernetes/main.tf b/modules/kubernetes/main.tf index 230cd394..0607c0bb 100644 --- a/modules/kubernetes/main.tf +++ b/modules/kubernetes/main.tf @@ -327,3 +327,8 @@ module "redis" { source = "./redis" tls_secret_name = var.tls_secret_name } + +module "ytdlp" { + source = "./youtube_dl" + tls_secret_name = var.tls_secret_name +} diff --git a/modules/kubernetes/youtube_dl/main.tf b/modules/kubernetes/youtube_dl/main.tf new file mode 100644 index 00000000..b34b06da --- /dev/null +++ b/modules/kubernetes/youtube_dl/main.tf @@ -0,0 +1,153 @@ +variable "tls_secret_name" {} + +resource "kubernetes_namespace" "ytdlp" { + metadata { + name = "ytdlp" + } +} + +module "tls_secret" { + source = "../setup_tls_secret" + namespace = "ytdlp" + tls_secret_name = var.tls_secret_name +} + +resource "kubernetes_deployment" "ytdlp" { + # resource "kubernetes_daemonset" "technitium" { + metadata { + name = "ytdlp" + namespace = "ytdlp" + labels = { + app = "ytdlp" + } + } + spec { + # strategy { + # type = "Recreate" + # } + # replicas = 1 + selector { + match_labels = { + app = "ytdlp" + } + } + template { + metadata { + labels = { + app = "ytdlp" + } + } + spec { + container { + image = "tzahi12345/youtubedl-material:latest" + name = "ytdlp" + # resources { + # limits = { + # cpu = "1" + # memory = "1Gi" + # } + # requests = { + # cpu = "1" + # memory = "1Gi" + # } + # } + port { + container_port = 17442 + } + volume_mount { + mount_path = "/app/appdata" + name = "data" + } + volume_mount { + mount_path = "/app/audio" + name = "data" + } + volume_mount { + mount_path = "/app/video" + name = "data" + } + volume_mount { + mount_path = "/app/users" + name = "data" + } + volume_mount { + mount_path = "/app/subscriptions" + name = "data" + } + } + volume { + name = "data" + nfs { + path = "/mnt/main/ytdlp" + server = "10.0.10.15" + } + } + # } + } + } + } +} + +resource "kubernetes_service" "ytdlp" { + metadata { + name = "ytdlp" + namespace = "ytdlp" + labels = { + "app" = "ytdlp" + } + # annotations = { + # "metallb.universe.tf/allow-shared-ip" : "shared" + # } + } + + spec { + # type = "LoadBalancer" + # external_traffic_policy = "Cluster" + selector = { + app = "ytdlp" + } + port { + name = "ytdlp" + port = 80 + target_port = 17442 + protocol = "TCP" + } + } +} +resource "kubernetes_ingress_v1" "ytdlp" { + metadata { + name = "ytdlp-ingress" + namespace = "ytdlp" + annotations = { + "kubernetes.io/ingress.class" = "nginx" + "nginx.ingress.kubernetes.io/affinity" = "cookie" + # "nginx.ingress.kubernetes.io/auth-tls-verify-client" = "on" + # "nginx.ingress.kubernetes.io/auth-tls-secret" = "default/ca-secret" + # "nginx.ingress.kubernetes.io/auth-url" : "https://oauth2.viktorbarzin.me/oauth2/auth" + # "nginx.ingress.kubernetes.io/auth-signin" : "https://oauth2.viktorbarzin.me/oauth2/start?rd=/redirect/$http_host$escaped_request_uri" + } + } + + spec { + tls { + hosts = ["yt.viktorbarzin.me"] + secret_name = var.tls_secret_name + } + rule { + host = "yt.viktorbarzin.me" + http { + path { + path = "/" + backend { + service { + name = "ytdlp" + port { + number = 80 + } + } + } + } + } + } + } +} diff --git a/terraform.tfstate b/terraform.tfstate index 4525bb46..bea49fd6 100644 Binary files a/terraform.tfstate and b/terraform.tfstate differ