aboutsummaryrefslogtreecommitdiff
path: root/roles/jellyfin
diff options
context:
space:
mode:
Diffstat (limited to 'roles/jellyfin')
-rw-r--r--roles/jellyfin/defaults/main.yaml5
-rw-r--r--roles/jellyfin/files/jellyfin/ingress.yaml33
-rw-r--r--roles/jellyfin/files/jellyfin/pv.yaml34
-rw-r--r--roles/jellyfin/files/jellyfin/pvc.yaml30
-rw-r--r--roles/jellyfin/tasks/main.yaml68
5 files changed, 170 insertions, 0 deletions
diff --git a/roles/jellyfin/defaults/main.yaml b/roles/jellyfin/defaults/main.yaml
new file mode 100644
index 0000000..47cfbc7
--- /dev/null
+++ b/roles/jellyfin/defaults/main.yaml
@@ -0,0 +1,5 @@
+jellyfin:
+ enabled: false
+ port: 8096
+ version: 10.10.0
+ replicas: 1
diff --git a/roles/jellyfin/files/jellyfin/ingress.yaml b/roles/jellyfin/files/jellyfin/ingress.yaml
new file mode 100644
index 0000000..ab148ba
--- /dev/null
+++ b/roles/jellyfin/files/jellyfin/ingress.yaml
@@ -0,0 +1,33 @@
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+ name: jellyfin
+ annotations:
+ cert-manager.io/cluster-issuer: "letsencrypt-prod"
+spec:
+ ingressClassName: traefik
+ tls:
+ - hosts:
+ - media.aadityadhruv.com
+ secretName: jellyfin-tls
+ rules:
+ - host: media.home
+ http:
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: jellyfin
+ port:
+ number: 8096
+ - host: media.aadityadhruv.com
+ http:
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: jellyfin
+ port:
+ number: 8096
diff --git a/roles/jellyfin/files/jellyfin/pv.yaml b/roles/jellyfin/files/jellyfin/pv.yaml
new file mode 100644
index 0000000..6c7fcb9
--- /dev/null
+++ b/roles/jellyfin/files/jellyfin/pv.yaml
@@ -0,0 +1,34 @@
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: jellyfin-config
+ labels:
+ app: jellyfin-config
+spec:
+ storageClassName: nfs
+ capacity:
+ storage: 2Gi
+ accessModes:
+ - ReadWriteMany
+ nfs:
+ server: 192.168.20.5
+ path: /mnt/nfs/k3s/jellyfin/config
+ readOnly: false
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: jellyfin-data
+ labels:
+ app: jellyfin-data
+spec:
+ storageClassName: nfs
+ capacity:
+ storage: 100Gi
+ accessModes:
+ - ReadWriteMany
+ nfs:
+ server: 192.168.20.5
+ path: /mnt/nfs/k3s/jellyfin/data
+ readOnly: false
diff --git a/roles/jellyfin/files/jellyfin/pvc.yaml b/roles/jellyfin/files/jellyfin/pvc.yaml
new file mode 100644
index 0000000..47360a9
--- /dev/null
+++ b/roles/jellyfin/files/jellyfin/pvc.yaml
@@ -0,0 +1,30 @@
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: jellyfin-config-pvc
+spec:
+ storageClassName: nfs
+ accessModes:
+ - ReadWriteMany
+ resources:
+ requests:
+ storage: 2Gi
+ selector:
+ matchLabels:
+ app: jellyfin-config
+---
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: jellyfin-data-pvc
+spec:
+ storageClassName: nfs
+ accessModes:
+ - ReadWriteMany
+ resources:
+ requests:
+ storage: 100Gi
+ selector:
+ matchLabels:
+ app: jellyfin-data
diff --git a/roles/jellyfin/tasks/main.yaml b/roles/jellyfin/tasks/main.yaml
new file mode 100644
index 0000000..c5f471f
--- /dev/null
+++ b/roles/jellyfin/tasks/main.yaml
@@ -0,0 +1,68 @@
+- name: Add Jellyfin remote chart
+ kubernetes.core.helm_repository:
+ name: jellyfin
+ repo_url: https://utkuozdemir.org/helm-charts
+ delegate_to: localhost
+ run_once: true
+
+- name: Create Jellyfin PVs
+ kubernetes.core.k8s:
+ state: "{%- if jellyfin.enabled -%} present {%- else -%} absent {%- endif -%}"
+ src: "{{ lookup('env', 'PWD') }}/roles/jellyfin/files/jellyfin/pv.yaml"
+ namespace: default
+ delegate_to: localhost
+ run_once: true
+- name: Create Jellyfin PVCs
+ kubernetes.core.k8s:
+ state: "{%- if jellyfin.enabled -%} present {%- else -%} absent {%- endif -%}"
+ src: "{{ lookup('env', 'PWD') }}/roles/jellyfin/files/jellyfin/pvc.yaml"
+ namespace: default
+ delegate_to: localhost
+ run_once: true
+- name: Create Jellyfin Ingress
+ kubernetes.core.k8s:
+ state: "{%- if jellyfin.enabled -%} present {%- else -%} absent {%- endif -%}"
+ src: "{{ lookup('env', 'PWD') }}/roles/jellyfin/files/jellyfin/ingress.yaml"
+ namespace: default
+ delegate_to: localhost
+ run_once: true
+
+- name: Get Values Path
+ set_fact:
+ jellyfin_values_path: "{{ lookup('env', 'PWD') }}/roles/jellyfin/files/jellyfin/values.yaml"
+ delegate_to: localhost
+ run_once: true
+
+- name: Get Values
+ set_fact:
+ jellyfin_defaults: "{{ lookup('file', jellyfin_values_path) | from_yaml }}"
+ delegate_to: localhost
+ run_once: true
+
+
+- name: Set User overrides fact
+ set_fact:
+ overrides:
+ port: "{{ jellyfin.port }}"
+ replicaCount: "{{ jellyfin.replicas }}"
+ image:
+ tag: "{{ jellyfin.version }}"
+
+- name: Merge Values with overrides
+ set_fact:
+ jellyfin_values: "{{ jellyfin_defaults | combine(overrides, recursive=True) }}"
+ delegate_to: localhost
+ run_once: true
+
+- debug:
+ var: jellyfin_values
+
+- name: Deploy Jellyfin
+ kubernetes.core.helm:
+ name: jellyfin
+ chart_ref: jellyfin/jellyfin
+ values: "{{ jellyfin_values }}"
+ namespace: default
+ state: "{%- if jellyfin.enabled -%} present {%- else -%} absent {%- endif -%}"
+ delegate_to: localhost
+ run_once: true