image: repository: docker.io/jellyfin/jellyfin pullPolicy: IfNotPresent tag: 10.8.12@sha256:1be5ae7af68d43d1c1bd6e96e9dc15f57bc1a7340339a0305ac1295d9d752d32 broadcastProxyImage: repository: docker.io/alpine/socat pullPolicy: IfNotPresent tag: 1.7.4.4@sha256:514b2bfe1d0a2e03f2b4824cb3fb71777b5d228933474acec224f6351f9fd95b 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 UDP-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