Compare commits

..

1 Commits

Author SHA1 Message Date
a2d026c25c Update ghcr.io/linuxserver/prowlarr:2.3.0 Docker digest to d3e9307
Some checks are pending
renovate/stability-days Updates have not met minimum release age requirement
lint-test-helm / lint-helm (pull_request) Successful in 1m14s
2026-01-17 17:43:28 +00:00
29 changed files with 472 additions and 221 deletions

View File

@@ -113,8 +113,8 @@ blocky:
ceph IN CNAME traefik-cl01tl ceph IN CNAME traefik-cl01tl
code-server IN CNAME traefik-cl01tl code-server IN CNAME traefik-cl01tl
ephemera IN CNAME traefik-cl01tl ephemera IN CNAME traefik-cl01tl
excalidraw IN CNAME traefik-cl01tl
feishin IN CNAME traefik-cl01tl feishin IN CNAME traefik-cl01tl
fladder IN CNAME traefik-cl01tl
garage-s3 IN CNAME traefik-cl01tl garage-s3 IN CNAME traefik-cl01tl
garage-webui IN CNAME traefik-cl01tl garage-webui IN CNAME traefik-cl01tl
gatus IN CNAME traefik-cl01tl gatus IN CNAME traefik-cl01tl
@@ -134,6 +134,7 @@ blocky:
komodo IN CNAME traefik-cl01tl komodo IN CNAME traefik-cl01tl
lidarr IN CNAME traefik-cl01tl lidarr IN CNAME traefik-cl01tl
lidatube IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl
listenarr IN CNAME traefik-cl01tl
mail IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl
navidrome IN CNAME traefik-cl01tl navidrome IN CNAME traefik-cl01tl
ntfy IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl
@@ -160,6 +161,7 @@ blocky:
sonarr-4k IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl
sonarr-anime IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl
stalwart IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl
tautulli IN CNAME traefik-cl01tl
tdarr IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl
tubearchivist IN CNAME traefik-cl01tl tubearchivist IN CNAME traefik-cl01tl
vault IN CNAME traefik-cl01tl vault IN CNAME traefik-cl01tl

View File

@@ -1,6 +0,0 @@
dependencies:
- name: app-template
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2
digest: sha256:e05d84dd266b8b456a8bc7f9a2bb3ab01f4ac926efd1a58cf405b0cdab343d3f
generated: "2026-01-17T18:27:08.062835-06:00"

View File

@@ -1,21 +0,0 @@
apiVersion: v2
name: excalidraw
version: 1.0.0
description: Excalidraw
keywords:
- excalidraw
home: https://wiki.alexlebens.dev/
sources:
- https://github.com/excalidraw/excalidraw
- https://hub.docker.com/r/excalidraw/excalidraw
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
maintainers:
- name: alexlebens
dependencies:
- name: app-template
alias: excalidraw
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/excalidraw.png
# renovate: github=excalidraw/excalidraw
appVersion: 0.6.0

View File

@@ -1,51 +0,0 @@
excalidraw:
controllers:
main:
type: deployment
replicas: 1
strategy: Recreate
revisionHistoryLimit: 3
containers:
main:
image:
repository: excalidraw/excalidraw
tag: latest@sha256:3c2513e830bb6e195147c05b34ecf8393d0ba2b1cc86e93b407a5777d6135c6c
pullPolicy: IfNotPresent
env:
- name: NODE_ENV
value: production
- name: TZ
value: America/Chicago
resources:
requests:
cpu: 10m
memory: 128Mi
service:
main:
controller: main
ports:
http:
port: 80
targetPort: 80
protocol: HTTP
route:
main:
kind: HTTPRoute
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: traefik-gateway
namespace: traefik
hostnames:
- excalidraw.alexlebens.net
rules:
- backendRefs:
- group: ''
kind: Service
name: excalidraw
port: 80
weight: 100
matches:
- path:
type: PathPrefix
value: /

View File

@@ -131,6 +131,9 @@ gatus:
- name: jellyfin - name: jellyfin
url: https://jellyfin.alexlebens.net url: https://jellyfin.alexlebens.net
<<: *defaults <<: *defaults
- name: fladder
url: https://fladder.alexlebens.net
<<: *defaults
- name: tubearchivist - name: tubearchivist
url: https://tubearchivist.alexlebens.net url: https://tubearchivist.alexlebens.net
<<: *defaults <<: *defaults
@@ -170,9 +173,6 @@ gatus:
- name: kiwix - name: kiwix
url: https://kiwix.alexlebens.net url: https://kiwix.alexlebens.net
<<: *defaults <<: *defaults
- name: excalidraw
url: https://excalidraw.alexlebens.net
<<: *defaults
- name: gitea - name: gitea
url: https://gitea.alexlebens.net url: https://gitea.alexlebens.net
<<: *defaults <<: *defaults
@@ -206,6 +206,9 @@ gatus:
- name: alertmanager - name: alertmanager
url: https://alertmanager.alexlebens.net url: https://alertmanager.alexlebens.net
<<: *defaults <<: *defaults
- name: tautulli
url: https://tautulli.alexlebens.net
<<: *defaults
- name: jellystat - name: jellystat
url: https://jellystat.alexlebens.net url: https://jellystat.alexlebens.net
<<: *defaults <<: *defaults
@@ -322,6 +325,9 @@ gatus:
- name: shelfmark - name: shelfmark
url: https://shelfmark.alexlebens.net url: https://shelfmark.alexlebens.net
<<: *defaults <<: *defaults
- name: listenarr
url: https://listenarr.alexlebens.net
<<: *defaults
- name: www - name: www
url: https://www.alexlebens.dev url: https://www.alexlebens.dev
<<: *defaults <<: *defaults

View File

@@ -147,6 +147,12 @@ homepage:
href: https://yamtrack.alexlebens.net href: https://yamtrack.alexlebens.net
siteMonitor: http://yamtrack.yamtrack:80 siteMonitor: http://yamtrack.yamtrack:80
statusStyle: dot statusStyle: dot
- Movies and TV (Alt):
icon: sh-fladder.webp
description: Fladder, Jellyfin UI
href: https://fladder.alexlebens.net
siteMonitor: http://fladder.jellyfin:80
statusStyle: dot
- Movies and TV: - Movies and TV:
icon: sh-jellyfin.webp icon: sh-jellyfin.webp
description: Jellyfin description: Jellyfin
@@ -281,12 +287,6 @@ homepage:
href: https://kiwix.alexlebens.net href: https://kiwix.alexlebens.net
siteMonitor: http://kiwix.kiwix:80 siteMonitor: http://kiwix.kiwix:80
statusStyle: dot statusStyle: dot
- Draw:
icon: sh-excalidraw.webp
description: Excalidraw
href: https://excalidraw.alexlebens.net
siteMonitor: http://excalidraw.excalidraw:80
statusStyle: dot
- Code: - Code:
- Code (Public): - Code (Public):
icon: sh-gitea.webp icon: sh-gitea.webp
@@ -394,6 +394,12 @@ homepage:
query: prometheus_tsdb_storage_blocks_bytes query: prometheus_tsdb_storage_blocks_bytes
format: format:
type: bytes type: bytes
- Tautulli:
icon: sh-tautulli.webp
description: Plex Monitoring
href: https://tautulli.alexlebens.net
siteMonitor: http://tautulli.tautulli:80
statusStyle: dot
- Jellystat: - Jellystat:
icon: sh-jellystat.webp icon: sh-jellystat.webp
description: Jellyfin Monitoring description: Jellyfin Monitoring
@@ -686,6 +692,12 @@ homepage:
href: https://ephemera.alexlebens.net href: https://ephemera.alexlebens.net
siteMonitor: http://ephemera.ephemera:80 siteMonitor: http://ephemera.ephemera:80
statusStyle: dot statusStyle: dot
- Listenarr:
icon: sh-audiobookrequest.webp
description: Audiobooks
href: https://listenarr.alexlebens.net
siteMonitor: http://listenarr.listenarr:80
statusStyle: dot
- Other Homes: - Other Homes:
- Dev: - Dev:
icon: sh-homepage.webp icon: sh-homepage.webp

View File

@@ -9,7 +9,7 @@ jellyfin:
main: main:
image: image:
repository: ghcr.io/jellyfin/jellyfin repository: ghcr.io/jellyfin/jellyfin
tag: 10.11.6 tag: 10.11.5
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
env: env:
- name: TZ - name: TZ
@@ -39,6 +39,20 @@ jellyfin:
secretKeyRef: secretKeyRef:
name: jellyfin-exporter-secret name: jellyfin-exporter-secret
key: token key: token
fladder:
type: deployment
replicas: 1
strategy: Recreate
revisionHistoryLimit: 3
containers:
main:
image:
repository: ghcr.io/donutware/fladder
tag: v0.9.0
pullPolicy: IfNotPresent
env:
- name: BASE_URL
value: https://jellyfin.alexlebens.net/
service: service:
main: main:
forceRename: jellyfin forceRename: jellyfin
@@ -52,6 +66,14 @@ jellyfin:
port: 9594 port: 9594
targetPort: 9594 targetPort: 9594
protocol: HTTP protocol: HTTP
fladder:
forceRename: fladder
controller: fladder
ports:
http:
port: 80
targetPort: 80
protocol: HTTP
serviceMonitor: serviceMonitor:
main: main:
selector: selector:
@@ -86,6 +108,26 @@ jellyfin:
- path: - path:
type: PathPrefix type: PathPrefix
value: / value: /
fladder:
kind: HTTPRoute
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: traefik-gateway
namespace: traefik
hostnames:
- fladder.alexlebens.net
rules:
- backendRefs:
- group: ''
kind: Service
name: fladder
port: 80
weight: 100
matches:
- path:
type: PathPrefix
value: /
persistence: persistence:
config: config:
forceRename: jellyfin-config forceRename: jellyfin-config

View File

@@ -0,0 +1,9 @@
dependencies:
- name: app-template
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2
- name: volsync-target
repository: oci://harbor.alexlebens.net/helm-charts
version: 0.7.0
digest: sha256:3ca3de48695006c4a5bde214ee699677289b6a89ae1a92b6936c5f25d64ad25b
generated: "2026-01-16T18:49:46.484482035Z"

View File

@@ -0,0 +1,25 @@
apiVersion: v2
name: listenarr
version: 1.0.0
description: Listenarr
keywords:
- listenarr
- audiobooks
home: https://wiki.alexlebens.dev/
sources:
- https://github.com/therobbiedavis/Listenarr
- https://hub.docker.com/r/therobbiedavis/listenarr
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
maintainers:
- name: alexlebens
dependencies:
- name: app-template
alias: listenarr
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2
- name: volsync-target
alias: volsync-target-config
version: 0.7.0
repository: oci://harbor.alexlebens.net/helm-charts
# renovate: github=therobbiedavis/Listenarr
appVersion: 0.2.35

View File

@@ -0,0 +1,17 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: listenarr-nfs-storage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: listenarr-nfs-storage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
volumeName: listenarr-nfs-storage
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi

View File

@@ -0,0 +1,23 @@
apiVersion: v1
kind: PersistentVolume
metadata:
name: listenarr-nfs-storage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: listenarr-nfs-storage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-client
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
path: /volume2/Storage/Audiobooks
server: synologybond.alexlebens.net
mountOptions:
- vers=4
- minorversion=1
- noac

View File

@@ -0,0 +1,83 @@
listenarr:
controllers:
main:
type: deployment
replicas: 1
strategy: Recreate
revisionHistoryLimit: 3
containers:
main:
image:
repository: therobbiedavis/listenarr
tag: canary-0.2.35
pullPolicy: IfNotPresent
env:
- name: LISTENARR_PUBLIC_URL
value: https://listenarr.alexlebens.net
resources:
requests:
cpu: 50m
memory: 128Mi
service:
main:
controller: main
ports:
http:
port: 80
targetPort: 5000
protocol: HTTP
route:
main:
kind: HTTPRoute
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: traefik-gateway
namespace: traefik
hostnames:
- listenarr.alexlebens.net
rules:
- backendRefs:
- group: ''
kind: Service
name: listenarr
port: 80
weight: 100
matches:
- path:
type: PathPrefix
value: /
persistence:
config:
forceRename: listenarr
storageClass: ceph-block
accessMode: ReadWriteOnce
size: 5Gi
retain: true
advancedMounts:
main:
main:
- path: /app/config
readOnly: false
media:
existingClaim: listenarr-nfs-storage
advancedMounts:
main:
main:
- path: /data
readOnly: false
volsync-target-config:
pvcTarget: listenarr
moverSecurityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
fsGroupChangePolicy: OnRootMismatch
local:
enabled: true
schedule: 42 8 * * *
remote:
enabled: false
external:
enabled: true
schedule: 42 9 * * *

View File

@@ -143,7 +143,7 @@ matrix-hookshot:
main: main:
image: image:
repository: halfshot/matrix-hookshot repository: halfshot/matrix-hookshot
tag: 7.3.0 tag: 7.2.0
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
resources: resources:
requests: requests:

View File

@@ -9,7 +9,7 @@ plex:
main: main:
image: image:
repository: ghcr.io/linuxserver/plex repository: ghcr.io/linuxserver/plex
tag: 1.42.2@sha256:b19a5e34c6f8dd42abf88556b8aa5c8987c0c34820aaeaa320a02d8c17fdaab3 tag: 1.42.2@sha256:1720efa8e919a724ff3003cce7c1c0ae91a54e097ca3c8f6713a780c6fd73432
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
env: env:
- name: TZ - name: TZ

View File

@@ -190,21 +190,21 @@ data:
orphaned_dir: /qbittorrent/Orphaned orphaned_dir: /qbittorrent/Orphaned
cat: cat:
-< COMPLETED: /mnt/store/Torrent/FINISHED/COMPLETED
-< IMPORT: /mnt/store/Torrent/FINISHED/IMPORT
-< SAVE: /mnt/store/Torrent/FINISHED/SAVE
-< ZIM: /mnt/store/Kiwix
lidarr: /mnt/store/Torrent/FINISHED/LIDARR lidarr: /mnt/store/Torrent/FINISHED/LIDARR
prowlarr: /mnt/store/Torrent/FINISHED/SAVE prowlarr: /mnt/store/Torrent/FINISHED/SAVE
radarr: /mnt/store/Torrent/FINISHED/RADARR
radarr-4k: /mnt/store/Torrent/FINISHED/RADARR4K radarr-4k: /mnt/store/Torrent/FINISHED/RADARR4K
radarr-anime: /mnt/store/Torrent/FINISHED/RADARRANIME radarr-anime: /mnt/store/Torrent/FINISHED/RADARRANIME
radarr-standup: /mnt/store/Torrent/FINISHED/RADARRSTANDUP radarr-standup: /mnt/store/Torrent/FINISHED/RADARRSTANDUP
radarr: /mnt/store/Torrent/FINISHED/RADARR sonarr: /mnt/store/Torrent/FINISHED/SONARR
shelfmark-audiobooks: /mnt/store/Torrent/FINISHED/SHELFMARKAUDIOBOOKS
shelfmark-books: /mnt/store/Torrent/FINISHED/SHELFMARKBOOKS
sonarr-4k: /mnt/store/Torrent/FINISHED/SONARR4K sonarr-4k: /mnt/store/Torrent/FINISHED/SONARR4K
sonarr-anime: /mnt/store/Torrent/FINISHED/SONARRANIME sonarr-anime: /mnt/store/Torrent/FINISHED/SONARRANIME
sonarr: /mnt/store/Torrent/FINISHED/SONARR shelfmark-books: /mnt/store/Torrent/FINISHED/SHELFMARKBOOKS
shelfmark-audiobooks: /mnt/store/Torrent/FINISHED/SHELFMARKAUDIOBOOKS
-< ZIM: /mnt/store/Kiwix
-< SAVE: /mnt/store/Torrent/FINISHED/SAVE
-< IMPORT: /mnt/store/Torrent/FINISHED/IMPORT
-< COMPLETED: /mnt/store/Torrent/FINISHED/COMPLETED
tracker: tracker:
alpharatio.cc: alpharatio.cc:

View File

@@ -28,7 +28,7 @@ qbittorrent:
qbittorrent: qbittorrent:
image: image:
repository: ghcr.io/linuxserver/qbittorrent repository: ghcr.io/linuxserver/qbittorrent
tag: 5.1.4@sha256:f430d70c70d1547fded30fbc3181c4750cef354212a5138ab754eba9ba8bd9e1 tag: 5.1.4@sha256:95114034a7f74672b76f795f6938921b0ca795f85b59b48691035dc66714f34c
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
env: env:
- name: TZ - name: TZ

View File

@@ -2,8 +2,5 @@ dependencies:
- name: app-template - name: app-template
repository: https://bjw-s-labs.github.io/helm-charts/ repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2 version: 4.6.2
- name: volsync-target digest: sha256:a7d77df9ded68bf93307246daffdb76d6e19d0730dcfc41a34b153431c2177e3
repository: oci://harbor.alexlebens.net/helm-charts generated: "2026-01-16T18:53:35.024587132Z"
version: 0.7.0
digest: sha256:ae9759dd77c556d6fd16837e2c0c35eb9ecff11a11b40c7c40b55eab9d0e73d0
generated: "2026-01-18T21:29:37.140884-06:00"

View File

@@ -17,9 +17,5 @@ dependencies:
alias: shelfmark alias: shelfmark
repository: https://bjw-s-labs.github.io/helm-charts/ repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2 version: 4.6.2
- name: volsync-target
alias: volsync-target-config
version: 0.7.0
repository: oci://harbor.alexlebens.net/helm-charts
icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/shelfmark.webp icon: https://cdn.jsdelivr.net/gh/selfhst/icons@main/webp/shelfmark.webp
appVersion: v1.0.1 appVersion: v1.0.1

View File

@@ -15,41 +15,3 @@ spec:
resources: resources:
requests: requests:
storage: 1Gi storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shelfmark-audiobooks-nfs-storage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: shelfmark-audiobooks-nfs-storage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
volumeName: shelfmark-audiobooks-nfs-storage
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shelfmark-downloads-nfs-storage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: shelfmark-downloads-nfs-storage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
volumeName: shelfmark-downloads-nfs-storage
storageClassName: nfs-client
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi

View File

@@ -21,53 +21,3 @@ spec:
- vers=4 - vers=4
- minorversion=1 - minorversion=1
- noac - noac
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: shelfmark-audiobooks-nfs-storage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: shelfmark-audiobooks-nfs-storage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-client
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
path: /volume2/Storage/Audiobooks
server: synologybond.alexlebens.net
mountOptions:
- vers=4
- minorversion=1
- noac
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: shelfmark-downloads-nfs-storage
namespace: {{ .Release.Namespace }}
labels:
app.kubernetes.io/name: shelfmark-downloads-nfs-storage
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/part-of: {{ .Release.Name }}
spec:
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-client
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
nfs:
path: /volume2/Storage/Torrent
server: synologybond.alexlebens.net
mountOptions:
- vers=4
- minorversion=1
- noac

View File

@@ -14,8 +14,10 @@ shelfmark:
env: env:
- name: FLASK_PORT - name: FLASK_PORT
value: 8084 value: 8084
- name: INGEST_DIR
value: /ingest
- name: SEARCH_MODE - name: SEARCH_MODE
value: universal value: direct
probes: probes:
liveness: liveness:
enabled: true enabled: true
@@ -66,7 +68,6 @@ shelfmark:
value: / value: /
persistence: persistence:
config: config:
forceRename: shelfmark
storageClass: ceph-block storageClass: ceph-block
accessMode: ReadWriteOnce accessMode: ReadWriteOnce
size: 1Gi size: 1Gi
@@ -83,27 +84,13 @@ shelfmark:
main: main:
- path: /ingest - path: /ingest
readOnly: false readOnly: false
audiobooks:
existingClaim: shelfmark-audiobooks-nfs-storage
advancedMounts:
main:
main:
- path: /audiobooks
readOnly: false
downloads:
existingClaim: shelfmark-downloads-nfs-storage
advancedMounts:
main:
main:
- path: /mnt/store/Torrent
readOnly: false
volsync-target-config: volsync-target-config:
pvcTarget: shelfmark pvcTarget: shelfmark-config
local: local:
enabled: true enabled: true
schedule: 38 11 * * * schedule: 0 8 * * *
remote: remote:
enabled: false enabled: false
external: external:
enabled: true enabled: true
schedule: 38 12 * * * schedule: 0 9 * * *

View File

@@ -0,0 +1,9 @@
dependencies:
- name: app-template
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2
- name: volsync-target
repository: oci://harbor.alexlebens.net/helm-charts
version: 0.7.0
digest: sha256:50badda5b51f1c82558bee67c3a647bdd356c9b7db06acfeef05501aaaabd911
generated: "2026-01-16T18:55:22.993941938Z"

View File

@@ -0,0 +1,26 @@
apiVersion: v2
name: tautulli
version: 1.0.0
description: Tautulli
keywords:
- tautulli
- plex
home: https://wiki.alexlebens.dev/s/b2f5d20a-b3c2-4e7a-b550-7b2855264408
sources:
- https://github.com/Tautulli/Tautulli
- https://github.com/Tautulli/Tautulli/pkgs/container/tautulli
- https://github.com/bjw-s-labs/helm-charts/tree/main/charts/other/app-template
maintainers:
- name: alexlebens
dependencies:
- name: app-template
alias: tautulli
repository: https://bjw-s-labs.github.io/helm-charts/
version: 4.6.2
- name: volsync-target
alias: volsync-target-config
version: 0.7.0
repository: oci://harbor.alexlebens.net/helm-charts
icon: https://cdn.jsdelivr.net/gh/selfhst/icons/png/tautulli.png
# renovate: github=Tautulli/Tautulli
appVersion: v2.16.0

View File

@@ -0,0 +1,179 @@
tautulli:
controllers:
main:
type: deployment
annotations:
reloader.stakater.com/auto: "true"
replicas: 1
strategy: Recreate
revisionHistoryLimit: 3
containers:
main:
image:
repository: ghcr.io/tautulli/tautulli
tag: v2.16.0
pullPolicy: IfNotPresent
env:
- name: PUID
value: 1001
- name: GUID
value: 1001
- name: TZ
value: US/Central
resources:
requests:
cpu: 10m
memory: 128Mi
configMaps:
scripts:
enabled: true
data:
select_tmdb_poster.py: |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
Description: Selects the default TMDB poster if no poster is selected
or the current poster is from Gracenote.
Author: /u/SwiftPanda16
Requires: plexapi
Usage:
* Change the posters for an entire library:
python select_tmdb_poster.py --library "Movies"
* Change the poster for a specific item:
python select_tmdb_poster.py --rating_key 1234
* By default locked posters are skipped. To update locked posters:
python select_tmdb_poster.py --library "Movies" --include_locked
Tautulli script trigger:
* Notify on recently added
Tautulli script conditions:
* Filter which media to select the poster. Examples:
[ Media Type | is | movie ]
Tautulli script arguments:
* Recently Added:
--rating_key {rating_key}
'''
import argparse
import os
import plexapi.base
from plexapi.server import PlexServer
plexapi.base.USER_DONT_RELOAD_FOR_KEYS.add('fields')
# Environmental Variables
PLEX_URL = os.getenv('PLEX_URL')
PLEX_TOKEN = os.getenv('PLEX_TOKEN')
def select_tmdb_poster_library(library, include_locked=False):
for item in library.all(includeGuids=False):
# Only reload for fields
item.reload(**{k: 0 for k, v in item._INCLUDES.items()})
select_tmdb_poster_item(item, include_locked=include_locked)
def select_tmdb_poster_item(item, include_locked=False):
if item.isLocked('thumb') and not include_locked: # PlexAPI 4.5.10
print(f"Locked poster for {item.title}. Skipping.")
return
posters = item.posters()
selected_poster = next((p for p in posters if p.selected), None)
if selected_poster is None:
print(f"WARNING: No poster selected for {item.title}.")
else:
skipping = ' Skipping.' if selected_poster.provider != 'gracenote' else ''
print(f"Poster provider is '{selected_poster.provider}' for {item.title}.{skipping}")
if posters and (selected_poster is None or selected_poster.provider == 'gracenote'):
# Fallback to first poster if no TMDB posters are available
tmdb_poster = next((p for p in posters if p.provider == 'tmdb'), posters[0])
# Selecting the poster automatically locks it
tmdb_poster.select()
print(f"Selected {tmdb_poster.provider} poster for {item.title}.")
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--rating_key', type=int)
parser.add_argument('--library')
parser.add_argument('--include_locked', action='store_true')
opts = parser.parse_args()
plex = PlexServer(PLEX_URL, PLEX_TOKEN)
if opts.rating_key:
item = plex.fetchItem(opts.rating_key)
select_tmdb_poster_item(item, opts.include_locked)
elif opts.library:
library = plex.library.section(opts.library)
select_tmdb_poster_library(library, opts.include_locked)
else:
print("No --rating_key or --library specified. Exiting.")
service:
main:
controller: main
ports:
http:
port: 80
targetPort: 8181
protocol: HTTP
route:
main:
kind: HTTPRoute
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: traefik-gateway
namespace: traefik
hostnames:
- tautulli.alexlebens.net
rules:
- backendRefs:
- group: ''
kind: Service
name: tautulli
port: 80
weight: 100
matches:
- path:
type: PathPrefix
value: /
persistence:
scripts:
enabled: true
type: configMap
name: tautulli-scripts
advancedMounts:
main:
main:
- path: /config/scripts/select_tmdb_poster.py
readOnly: true
mountPropagation: None
subPath: select_tmdb_poster.py
config:
forceRename: tautulli-config
storageClass: ceph-block
accessMode: ReadWriteOnce
size: 5Gi
retain: true
advancedMounts:
main:
main:
- path: /config
readOnly: false
volsync-target-config:
pvcTarget: tautulli-config
local:
enabled: true
schedule: 34 11 * * *
remote:
enabled: false
external:
enabled: true
schedule: 34 12 * * *

View File

@@ -88,8 +88,8 @@ customDNS:
ceph IN CNAME traefik-cl01tl ceph IN CNAME traefik-cl01tl
code-server IN CNAME traefik-cl01tl code-server IN CNAME traefik-cl01tl
ephemera IN CNAME traefik-cl01tl ephemera IN CNAME traefik-cl01tl
excalidraw IN CNAME traefik-cl01tl
feishin IN CNAME traefik-cl01tl feishin IN CNAME traefik-cl01tl
fladder IN CNAME traefik-cl01tl
garage-s3 IN CNAME traefik-cl01tl garage-s3 IN CNAME traefik-cl01tl
garage-webui IN CNAME traefik-cl01tl garage-webui IN CNAME traefik-cl01tl
gatus IN CNAME traefik-cl01tl gatus IN CNAME traefik-cl01tl
@@ -109,6 +109,7 @@ customDNS:
komodo IN CNAME traefik-cl01tl komodo IN CNAME traefik-cl01tl
lidarr IN CNAME traefik-cl01tl lidarr IN CNAME traefik-cl01tl
lidatube IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl
listenarr IN CNAME traefik-cl01tl
mail IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl
navidrome IN CNAME traefik-cl01tl navidrome IN CNAME traefik-cl01tl
ntfy IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl
@@ -135,6 +136,7 @@ customDNS:
sonarr-4k IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl
sonarr-anime IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl
stalwart IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl
tautulli IN CNAME traefik-cl01tl
tdarr IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl
tubearchivist IN CNAME traefik-cl01tl tubearchivist IN CNAME traefik-cl01tl
vault IN CNAME traefik-cl01tl vault IN CNAME traefik-cl01tl

View File

@@ -1,7 +1,7 @@
--- ---
services: services:
traefik: traefik:
image: ghcr.io/traefik/traefik:v3.6.7 image: ghcr.io/traefik/traefik:v3.6.6
container_name: traefik container_name: traefik
command: command:
- "--global.checkNewVersion=false" - "--global.checkNewVersion=false"

View File

@@ -109,8 +109,8 @@ customDNS:
ceph IN CNAME traefik-cl01tl ceph IN CNAME traefik-cl01tl
code-server IN CNAME traefik-cl01tl code-server IN CNAME traefik-cl01tl
ephemera IN CNAME traefik-cl01tl ephemera IN CNAME traefik-cl01tl
excalidraw IN CNAME traefik-cl01tl
feishin IN CNAME traefik-cl01tl feishin IN CNAME traefik-cl01tl
fladder IN CNAME traefik-cl01tl
garage-s3 IN CNAME traefik-cl01tl garage-s3 IN CNAME traefik-cl01tl
garage-webui IN CNAME traefik-cl01tl garage-webui IN CNAME traefik-cl01tl
gatus IN CNAME traefik-cl01tl gatus IN CNAME traefik-cl01tl
@@ -130,6 +130,7 @@ customDNS:
komodo IN CNAME traefik-cl01tl komodo IN CNAME traefik-cl01tl
lidarr IN CNAME traefik-cl01tl lidarr IN CNAME traefik-cl01tl
lidatube IN CNAME traefik-cl01tl lidatube IN CNAME traefik-cl01tl
listenarr IN CNAME traefik-cl01tl
mail IN CNAME traefik-cl01tl mail IN CNAME traefik-cl01tl
navidrome IN CNAME traefik-cl01tl navidrome IN CNAME traefik-cl01tl
ntfy IN CNAME traefik-cl01tl ntfy IN CNAME traefik-cl01tl
@@ -156,6 +157,7 @@ customDNS:
sonarr-4k IN CNAME traefik-cl01tl sonarr-4k IN CNAME traefik-cl01tl
sonarr-anime IN CNAME traefik-cl01tl sonarr-anime IN CNAME traefik-cl01tl
stalwart IN CNAME traefik-cl01tl stalwart IN CNAME traefik-cl01tl
tautulli IN CNAME traefik-cl01tl
tdarr IN CNAME traefik-cl01tl tdarr IN CNAME traefik-cl01tl
tubearchivist IN CNAME traefik-cl01tl tubearchivist IN CNAME traefik-cl01tl
vault IN CNAME traefik-cl01tl vault IN CNAME traefik-cl01tl

View File

@@ -1,7 +1,7 @@
--- ---
services: services:
traefik: traefik:
image: ghcr.io/traefik/traefik:v3.6.7 image: ghcr.io/traefik/traefik:v3.6.6
container_name: traefik container_name: traefik
command: command:
- "--global.checkNewVersion=false" - "--global.checkNewVersion=false"

View File

@@ -20,7 +20,7 @@ services:
- /dev/net/tun:/dev/net/tun - /dev/net/tun:/dev/net/tun
traefik: traefik:
image: ghcr.io/traefik/traefik:v3.6.7 image: ghcr.io/traefik/traefik:v3.6.6
container_name: traefik container_name: traefik
command: command:
- "--global.checkNewVersion=false" - "--global.checkNewVersion=false"