From 0f849f2e10fb1faaa31303bc710f6606d31f1b02 Mon Sep 17 00:00:00 2001 From: ducoterra Date: Mon, 12 Oct 2020 15:56:04 -0400 Subject: [PATCH] add jf-detector --- .gitignore | 2 ++ Dockerfile | 7 +++++++ docker-compose.yaml | 4 ++++ jellyfin/templates/cronjob.yaml | 18 +++++++++++++++++ jellyfin/templates/deploy.yaml | 4 ++-- jellyfin/values.yaml | 8 ++++++++ jf-detector.py | 34 +++++++++++++++++++++++++++++++++ requirements.txt | 1 + 8 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 jellyfin/templates/cronjob.yaml create mode 100644 jf-detector.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba1e329 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +venv/ +.vscode/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..dea1a17 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM python:latest + +COPY requirements.txt ./ +RUN pip install -r requirements.txt + +COPY jf-detector.py ./ +CMD python jf-detector.py \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index 9da9472..af6af49 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -11,6 +11,10 @@ services: - "8080:8096" - "8443:8920" - "1900:1900" + jf-detector: + image: hub.ducoterra.net/ducoterra/jf-detector:0.0.4 + build: . + command: sleep infinity volumes: jf-data: diff --git a/jellyfin/templates/cronjob.yaml b/jellyfin/templates/cronjob.yaml new file mode 100644 index 0000000..84a8b9e --- /dev/null +++ b/jellyfin/templates/cronjob.yaml @@ -0,0 +1,18 @@ +{{ if .Values.install.jf_detector }} +apiVersion: batch/v1beta1 +kind: CronJob +metadata: + name: jf-detector +spec: + schedule: "*/1 * * * *" + successfulJobsHistoryLimit: 1 + failedJobsHistoryLimit: 1 + jobTemplate: + spec: + template: + spec: + containers: + - name: jf-detector + image: {{ .Values.jf_detector.image }} + restartPolicy: Never +{{ end }} \ No newline at end of file diff --git a/jellyfin/templates/deploy.yaml b/jellyfin/templates/deploy.yaml index d636430..8bd62d9 100644 --- a/jellyfin/templates/deploy.yaml +++ b/jellyfin/templates/deploy.yaml @@ -12,7 +12,7 @@ spec: app: {{ .Release.Name }} spec: containers: - - image: jellyfin/jellyfin:10.6.4 + - image: {{ .Values.jellyfin.image }} name: jellyfin env: - name: NODE_NAME @@ -44,7 +44,7 @@ spec: resources: limits: memory: "8Gi" - cpu: "8" + cpu: "4" requests: memory: "1Mi" cpu: "1m" diff --git a/jellyfin/values.yaml b/jellyfin/values.yaml index e69de29..144bfb7 100644 --- a/jellyfin/values.yaml +++ b/jellyfin/values.yaml @@ -0,0 +1,8 @@ +install: + jf_detector: true + +jf_detector: + image: hub.ducoterra.net/ducoterra/jf-detector:0.0.4 + +jellyfin: + image: jellyfin/jellyfin:10.6.4 \ No newline at end of file diff --git a/jf-detector.py b/jf-detector.py new file mode 100644 index 0000000..472102e --- /dev/null +++ b/jf-detector.py @@ -0,0 +1,34 @@ +from kubernetes import client, config +from requests.exceptions import ReadTimeout + +import requests +import logging +import sys + +logging.basicConfig(format='%(asctime)s %(message)s', level=logging.INFO) + +try: + r = requests.get("https://jellyfin.ducoterra.net/users/public", timeout=5) + logging.info('Jellyfin up. Exiting.') + sys.exit(0) +except ReadTimeout as e: + logging.warning(e) + try: + logging.info('Trying incluster config') + config.load_incluster_config() + logging.info('Incluster config loaded') + except: + logging.info('Incluster config failed. Trying standard config') + config.load_kube_config() + logging.info('Standard config loaded') + v1 = client.CoreV1Api() + logging.info('Listing all pods in namespace ducoterra') + ret = v1.list_namespaced_pod(namespace="ducoterra") + jellyfin_pod = list(filter(lambda item: 'jellyfin' in item.metadata.name, ret.items)) + logging.info(f'Found {len(jellyfin_pod)} pods') + if len(jellyfin_pod) > 0: + logging.warning('deleting jellyfin pod') + v1.delete_namespaced_pod(jellyfin_pod[0].metadata.name,'ducoterra') + else: + logging.error('no jellyfin pods found, not deleting') + sys.exit(1) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..19eea4a --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +kubernetes==11.0.0 \ No newline at end of file