Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion charts/servarr/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ maintainers:
url: https://kubito.dev
apiVersion: v2
appVersion: 1.3.0
version: 1.5.2
version: 1.5.3
description: Kubito Servarr Helm Chart
home: https://github.com/kubitodev/helm/tree/main/charts/servarr
icon: https://kubito.dev/images/kubito.svg
Expand Down
7 changes: 7 additions & 0 deletions charts/servarr/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,13 @@ The command removes all the Kubernetes components associated with the chart and

## Parameters

### Shared media parameters

| Name | Description | Value |
| --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
| `sharedMedia.enabled` | Mount a shared /media volume on every *arr container independently of Jellyfin. Requires sharedMedia.existingClaim. When false, the chart falls back to the legacy jellyfin.persistence.media path so existing deployments keep working unchanged. | `false` |
| `sharedMedia.existingClaim` | Name of an existing PersistentVolumeClaim to mount as /media on the *arr containers. Required when sharedMedia.enabled is true; ignored otherwise. | `""` |

### Jellyfin parameters

| Name | Description | Value |
Expand Down
38 changes: 38 additions & 0 deletions charts/servarr/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{{/*
Returns a non-empty string ("true") when the shared /media volume should be
mounted on the *arr containers. Returns empty otherwise.

Two mechanisms are honored, in order of precedence:
1. sharedMedia.enabled + sharedMedia.existingClaim — the decoupled path,
independent of jellyfin. Useful when jellyfin is disabled but the *arr
apps still need a common media root.
2. jellyfin.enabled + jellyfin.persistence.media.enabled — the legacy path,
preserved for backwards compatibility with existing deployments.

Callers must still gate on their own <app>.persistence.enabled.

Usage:
{{- if and .Values.sonarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
*/}}
{{- define "servarr.mediaEnabled" -}}
{{- if or (and .Values.sharedMedia.enabled .Values.sharedMedia.existingClaim) (and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled) -}}
true
{{- end -}}
{{- end -}}

{{/*
Returns the PVC name to use for the shared /media volume.
Precedence:
1. sharedMedia.existingClaim (if sharedMedia.enabled)
2. jellyfin.persistence.media.existingClaim (legacy path)
3. "<release>-jellyfin-media" (default PVC created by this chart)
*/}}
{{- define "servarr.mediaClaimName" -}}
{{- if and .Values.sharedMedia.enabled .Values.sharedMedia.existingClaim -}}
{{ .Values.sharedMedia.existingClaim }}
{{- else if .Values.jellyfin.persistence.media.existingClaim -}}
{{ .Values.jellyfin.persistence.media.existingClaim }}
{{- else -}}
{{ .Release.Name }}-jellyfin-media
{{- end -}}
{{- end -}}
8 changes: 4 additions & 4 deletions charts/servarr/templates/bazarr/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ spec:
emptyDir: { }
{{- end }}
- name: media
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.bazarr.persistence.enabled }}
{{- if and .Values.bazarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
persistentVolumeClaim:
claimName: {{ if .Values.jellyfin.persistence.media.existingClaim }}{{ .Values.jellyfin.persistence.media.existingClaim }}{{- else }}{{ .Release.Name }}-jellyfin-media{{- end }}
claimName: {{ include "servarr.mediaClaimName" . }}
{{- else }}
emptyDir: { }
{{- end }}
Expand All @@ -71,12 +71,12 @@ spec:
volumeMounts:
- mountPath: /config
name: config
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.sonarr.persistence.enabled .Values.bazarr.persistence.enabled }}
{{- if and .Values.sonarr.persistence.enabled .Values.bazarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
- mountPath: "/media/{{ .Values.sonarr.persistence.path }}"
name: media
subPath: {{ .Values.sonarr.persistence.path }}
{{- end }}
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.radarr.persistence.enabled .Values.bazarr.persistence.enabled }}
{{- if and .Values.radarr.persistence.enabled .Values.bazarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
- mountPath: "/media/{{ .Values.radarr.persistence.path }}"
name: media
subPath: {{ .Values.radarr.persistence.path }}
Expand Down
6 changes: 3 additions & 3 deletions charts/servarr/templates/cleanuparr/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ spec:
emptyDir: { }
{{- end }}
- name: media
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled }}
{{- if include "servarr.mediaEnabled" . }}
persistentVolumeClaim:
claimName: {{ .Release.Name }}-jellyfin-media
claimName: {{ include "servarr.mediaClaimName" . }}
{{- else }}
emptyDir: { }
{{- end }}
Expand All @@ -71,7 +71,7 @@ spec:
volumeMounts:
- mountPath: /config
name: config
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.qbittorrent.persistence.enabled }}
{{- if and .Values.qbittorrent.persistence.enabled (include "servarr.mediaEnabled" .) }}
- mountPath: "/media/{{ .Values.qbittorrent.persistence.path }}"
name: media
subPath: {{ .Values.qbittorrent.persistence.path }}
Expand Down
2 changes: 1 addition & 1 deletion charts/servarr/templates/jellyfin/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ spec:
- name: media
{{- if .Values.jellyfin.persistence.media.enabled }}
persistentVolumeClaim:
claimName: {{ if .Values.jellyfin.persistence.media.existingClaim }}{{ .Values.jellyfin.persistence.media.existingClaim }}{{- else }}{{ .Release.Name }}-jellyfin-media{{- end }}
claimName: {{ include "servarr.mediaClaimName" . }}
{{- else }}
emptyDir: {}
{{- end }}
Expand Down
10 changes: 5 additions & 5 deletions charts/servarr/templates/lidarr/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ spec:
serviceAccountName: {{ .Values.lidarr.serviceAccount.name | default (printf "%s-lidarr" .Release.Name) }}
securityContext:
{{- toYaml .Values.lidarr.podSecurityContext | nindent 8 }}
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.lidarr.persistence.enabled }}
{{- if and .Values.lidarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
initContainers:
- name: init-directories
image: busybox
Expand All @@ -61,9 +61,9 @@ spec:
emptyDir: { }
{{- end }}
- name: media
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.lidarr.persistence.enabled }}
{{- if and .Values.lidarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
persistentVolumeClaim:
claimName: {{ if .Values.jellyfin.persistence.media.existingClaim }}{{ .Values.jellyfin.persistence.media.existingClaim }}{{- else }}{{ .Release.Name }}-jellyfin-media{{- end }}
claimName: {{ include "servarr.mediaClaimName" . }}
{{- else }}
emptyDir: { }
{{- end }}
Expand All @@ -79,7 +79,7 @@ spec:
volumeMounts:
- mountPath: /config
name: config
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.lidarr.persistence.enabled }}
{{- if and .Values.lidarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
- mountPath: /media
name: media
{{- end }}
Expand Down Expand Up @@ -123,7 +123,7 @@ spec:
- mountPath: /lidatube/config
name: config
subPath: lidatube
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.lidarr.persistence.enabled }}
{{- if and .Values.lidarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
- mountPath: /lidatube/downloads
name: media
subPath: {{ .Values.lidarr.persistence.path }}
Expand Down
6 changes: 3 additions & 3 deletions charts/servarr/templates/qbittorrent/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ spec:
emptyDir: { }
{{- end }}
- name: media
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.qbittorrent.persistence.enabled }}
{{- if and .Values.qbittorrent.persistence.enabled (include "servarr.mediaEnabled" .) }}
persistentVolumeClaim:
claimName: {{ if .Values.jellyfin.persistence.media.existingClaim }}{{ .Values.jellyfin.persistence.media.existingClaim }}{{- else }}{{ .Release.Name }}-jellyfin-media{{- end }}
claimName: {{ include "servarr.mediaClaimName" . }}
{{- else }}
emptyDir: { }
{{- end }}
Expand All @@ -71,7 +71,7 @@ spec:
volumeMounts:
- mountPath: /config
name: config
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.qbittorrent.persistence.enabled }}
{{- if and .Values.qbittorrent.persistence.enabled (include "servarr.mediaEnabled" .) }}
- mountPath: "/media/{{ .Values.qbittorrent.persistence.path }}"
name: media
subPath: {{ .Values.qbittorrent.persistence.path }}
Expand Down
8 changes: 4 additions & 4 deletions charts/servarr/templates/radarr/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ spec:
serviceAccountName: {{ .Values.radarr.serviceAccount.name | default (printf "%s-radarr" .Release.Name) }}
securityContext:
{{- toYaml .Values.radarr.podSecurityContext | nindent 8 }}
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.radarr.persistence.enabled }}
{{- if and .Values.radarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
initContainers:
- name: init-directories
image: busybox
Expand All @@ -61,9 +61,9 @@ spec:
emptyDir: { }
{{- end }}
- name: media
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.radarr.persistence.enabled }}
{{- if and .Values.radarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
persistentVolumeClaim:
claimName: {{ if .Values.jellyfin.persistence.media.existingClaim }}{{ .Values.jellyfin.persistence.media.existingClaim }}{{- else }}{{ .Release.Name }}-jellyfin-media{{- end }}
claimName: {{ include "servarr.mediaClaimName" . }}
{{- else }}
emptyDir: { }
{{- end }}
Expand All @@ -79,7 +79,7 @@ spec:
volumeMounts:
- mountPath: /config
name: config
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.radarr.persistence.enabled }}
{{- if and .Values.radarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
- mountPath: /media
name: media
{{- end }}
Expand Down
8 changes: 4 additions & 4 deletions charts/servarr/templates/sonarr/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ spec:
serviceAccountName: {{ .Values.sonarr.serviceAccount.name | default (printf "%s-sonarr" .Release.Name) }}
securityContext:
{{- toYaml .Values.sonarr.podSecurityContext | nindent 8 }}
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.sonarr.persistence.enabled }}
{{- if and .Values.sonarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
initContainers:
- name: init-directories
image: busybox
Expand All @@ -61,9 +61,9 @@ spec:
emptyDir: { }
{{- end }}
- name: media
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.sonarr.persistence.enabled }}
{{- if and .Values.sonarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
persistentVolumeClaim:
claimName: {{ if .Values.jellyfin.persistence.media.existingClaim }}{{ .Values.jellyfin.persistence.media.existingClaim }}{{- else }}{{ .Release.Name }}-jellyfin-media{{- end }}
claimName: {{ include "servarr.mediaClaimName" . }}
{{- else }}
emptyDir: { }
{{- end }}
Expand All @@ -79,7 +79,7 @@ spec:
volumeMounts:
- mountPath: /config
name: config
{{- if and .Values.jellyfin.enabled .Values.jellyfin.persistence.media.enabled .Values.sonarr.persistence.enabled }}
{{- if and .Values.sonarr.persistence.enabled (include "servarr.mediaEnabled" .) }}
- mountPath: /media
name: media
{{- end }}
Expand Down
9 changes: 9 additions & 0 deletions charts/servarr/values.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
## Default values for Jellyfin

## @section Shared media parameters

## @param sharedMedia.enabled Mount a shared /media volume on every *arr container independently of Jellyfin. Requires sharedMedia.existingClaim. When false, the chart falls back to the legacy jellyfin.persistence.media path so existing deployments keep working unchanged.
## @param sharedMedia.existingClaim Name of an existing PersistentVolumeClaim to mount as /media on the *arr containers. Required when sharedMedia.enabled is true; ignored otherwise.
##
sharedMedia:
enabled: false
existingClaim: ""

## @section Jellyfin parameters

## @param jellyfin.enabled Whether to enable Jellyfin.
Expand Down