image: repository: ghcr.io/jellyfin/jellyfin pullPolicy: IfNotPresent tag: 10.9.11@sha256:fc1b51f4be3fba725e42dae2022d9c6a5b069acce01bef04d32fdee025dc511e broadcastProxyImage: repository: docker.io/alpine/socat pullPolicy: IfNotPresent tag: 1.8.0.0@sha256:ac29a224a10be0cb25be8da022fef401a5ed0d09dcf13fcb5555ff666e75cc4c service: main: ports: main: port: 8096 targetPort: 8096 autodiscovery: enabled: true ports: autodiscovery: enabled: true protocol: udp port: 7359 targetPort: 7359 persistence: config: enabled: true mountPath: "/config" cache: enabled: true mountPath: "/cache" type: "emptyDir" transcode: enabled: true mountPath: "/config/transcodes" type: "emptyDir" portal: open: enabled: true securityContext: container: readOnlyRootFilesystem: false workload: main: podSpec: containers: main: env: JELLYFIN_PublishedServerUrl: "{{ $.Values.chartContext.appUrl }}" broadcastproxy: enabled: false type: DaemonSet podSpec: hostNetwork: true # Proxy doesn't seem to respect the TERM signal, so by default # this ends up just hanging until the default grace period ends. # This is unnecesary since this workload only proxies autodiscovery # messages. terminationGracePeriodSeconds: 3 containers: broadcastproxy: enabled: true primary: true imageSelector: broadcastProxyImage securityContext: readOnlyRootFilesystem: true command: ["/bin/sh"] # Quite a lot going on here: # - Resolve Jellyfin's autodiscovery service IP from its FQDN via getent hosts # - Export the IP to `$TARGET_IP` # - Check `$TARGET_IP` is not empty (so we can crash if it is - will help to detect templating errors) # - Touch `/tmp/healty` to use with the readiness, liveness and startup probes # - Start socat in proxy mode # - On exit remove `/tmp/healthy` args: - "-c" - 'export TARGET_IP=$(getent hosts ''{{ printf "%v-autodiscovery" (include "tc.v1.common.lib.chart.names.fullname" $) }}'' | awk ''{ print $1 }'') && [[ ! -z $TARGET_IP ]] && touch /tmp/healthy && socat UDP4-LISTEN:7359,fork,reuseaddr,rcvbuf=8096 UDP4-SENDTO:${TARGET_IP}:7359,rcvbuf=8096 ; rm -rf /tmp/healthy' probes: readiness: enabled: true type: exec command: - cat - /tmp/healthy liveness: enabled: true type: exec command: - cat - /tmp/healthy startup: enabled: true type: exec command: - cat - /tmp/healthy # -- enable Jellyfin autodiscovery on LAN autodiscovery: enabled: false updated: true