Merge pull request #93 from lexfrei/feature/fix-initcontainers-naming

This commit is contained in:
Cody Robibero authored and GitHub committed 2025-11-07 18:23:46 -07:00 Unverified
commit 3c66d3dd6a
5 files changed
+245 -5

No files matched your search

+7 -1
View File
@@ -8,10 +8,16 @@ keywords:
- jellyfin
- media
- self-hosted
version: 2.5.1
version: 3.0.0
appVersion: 10.11.2
annotations:
artifacthub.io/changes: |
- kind: deprecated
description: Deprecate initContainers parameter in favor of extraInitContainers for consistency (will be removed after 2030)
- kind: fixed
description: Fix extraInitContainers not working (was using wrong parameter name in template)
- kind: added
description: Add NOTES.txt with helpful post-installation information and deprecation warnings
- kind: added
description: Add startup probe to prevent pod restarts during slow initial startup with large media libraries
- kind: added
+95 -1
View File
@@ -1,9 +1,103 @@
Thank you for installing {{ .Chart.Name }}.
{{- if .Values.initContainers }}
#############################################################################
## ⚠️ WARNING ⚠️ ##
## ##
## The 'initContainers' parameter is DEPRECATED! ##
## Please migrate to 'extraInitContainers' instead. ##
## ##
## Support for 'initContainers' will be removed after 2030. ##
## ##
## Migration guide: ##
## Old: initContainers: [...] ##
## New: extraInitContainers: [...] ##
## ##
#############################################################################
{{- end }}
Thank you for installing {{ .Chart.Name }}!
Your release is named {{ .Release.Name }}.
To learn more about the release, try:
$ helm status {{ .Release.Name }} --namespace {{ .Release.Namespace }}
$ helm get all {{ .Release.Name }} --namespace {{ .Release.Namespace }}
{{- if .Values.ingress.enabled }}
{{- range $host := .Values.ingress.hosts }}
{{- range .paths }}
Jellyfin is available at:
http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }}
{{- end }}
{{- end }}
{{- else if contains "NodePort" .Values.service.type }}
Get the Jellyfin URL by running:
export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "jellyfin.fullname" . }})
export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}")
echo "Jellyfin URL: http://$NODE_IP:$NODE_PORT"
{{- else if contains "LoadBalancer" .Values.service.type }}
Get the Jellyfin URL by running:
NOTE: It may take a few minutes for the LoadBalancer IP to be available.
You can watch the status by running:
kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "jellyfin.fullname" . }}
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "jellyfin.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}")
echo "Jellyfin URL: http://$SERVICE_IP:{{ .Values.service.port }}"
{{- else if contains "ClusterIP" .Values.service.type }}
Get the Jellyfin URL by running:
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "jellyfin.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
echo "Jellyfin URL: http://127.0.0.1:8080"
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT
{{- end }}
{{- if .Values.persistence.config.enabled }}
Configuration is persisted to:
{{- if .Values.persistence.config.existingClaim }}
Existing PVC: {{ .Values.persistence.config.existingClaim }}
{{- else }}
PVC: {{ include "jellyfin.fullname" . }}-config
{{- end }}
{{- else }}
WARNING: Configuration persistence is disabled!
Data will be lost when the pod is restarted.
Enable persistence.config.enabled to persist your configuration.
{{- end }}
{{- if .Values.persistence.media.enabled }}
Media is {{ if eq .Values.persistence.media.type "hostPath" }}mounted from host path{{ else if eq .Values.persistence.media.type "pvc" }}persisted to PVC{{ else }}stored in emptyDir{{ end }}:
{{- if eq .Values.persistence.media.type "hostPath" }}
Host path: {{ .Values.persistence.media.hostPath }}
{{- else if eq .Values.persistence.media.type "pvc" }}
{{- if .Values.persistence.media.existingClaim }}
Existing PVC: {{ .Values.persistence.media.existingClaim }}
{{- else }}
PVC: {{ include "jellyfin.fullname" . }}-media
{{- end }}
{{- end }}
{{- else }}
WARNING: Media persistence is disabled!
Your media files will be lost when the pod is restarted.
Enable persistence.media.enabled to persist your media.
{{- end }}
For more information and documentation:
Repository: https://github.com/jellyfin/jellyfin-helm
Jellyfin Docs: https://jellyfin.org/docs/
$ helm status {{ .Release.Name }}
$ helm get all {{ .Release.Name }}
+9 -2
View File
@@ -134,9 +134,16 @@ spec:
{{- with .Values.extraContainers }}
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.initContainers }}
{{- if or .Values.initContainers .Values.extraInitContainers }}
# Support both initContainers (deprecated) and extraInitContainers for backward compatibility.
# TODO: Remove initContainers support after 2030
initContainers:
{{- toYaml . | nindent 6 }}
{{- if .Values.initContainers }}
{{- toYaml .Values.initContainers | nindent 6 }}
{{- end }}
{{- if .Values.extraInitContainers }}
{{- toYaml .Values.extraInitContainers | nindent 6 }}
{{- end }}
{{- end }}
volumes:
- name: config
@@ -0,0 +1,119 @@
suite: test init containers
templates:
- deployment.yaml
tests:
- it: should not have init containers by default
asserts:
- isNull:
path: spec.template.spec.initContainers
- it: should add extraInitContainers when specified
set:
extraInitContainers:
- name: init-config
image: busybox:1.35
command: ['sh', '-c', 'echo Initializing']
asserts:
- isNotNull:
path: spec.template.spec.initContainers
- lengthEqual:
path: spec.template.spec.initContainers
count: 1
- equal:
path: spec.template.spec.initContainers[0].name
value: init-config
- equal:
path: spec.template.spec.initContainers[0].image
value: busybox:1.35
- it: should support multiple extraInitContainers
set:
extraInitContainers:
- name: init-1
image: busybox:1.35
- name: init-2
image: alpine:3.18
asserts:
- lengthEqual:
path: spec.template.spec.initContainers
count: 2
- equal:
path: spec.template.spec.initContainers[0].name
value: init-1
- equal:
path: spec.template.spec.initContainers[1].name
value: init-2
- it: should preserve full container spec in extraInitContainers
set:
extraInitContainers:
- name: init-permissions
image: busybox:1.35
command: ['sh', '-c']
args: ['chown -R 1000:1000 /config']
volumeMounts:
- name: config
mountPath: /config
securityContext:
runAsUser: 0
asserts:
- equal:
path: spec.template.spec.initContainers[0].command[0]
value: sh
- equal:
path: spec.template.spec.initContainers[0].args[0]
value: 'chown -R 1000:1000 /config'
- equal:
path: spec.template.spec.initContainers[0].volumeMounts[0].name
value: config
- equal:
path: spec.template.spec.initContainers[0].securityContext.runAsUser
value: 0
# Deprecated initContainers (backward compatibility)
- it: should still support deprecated initContainers parameter
set:
initContainers:
- name: legacy-init
image: busybox:1.35
asserts:
- lengthEqual:
path: spec.template.spec.initContainers
count: 1
- equal:
path: spec.template.spec.initContainers[0].name
value: legacy-init
- it: should merge initContainers and extraInitContainers
set:
initContainers:
- name: legacy-init
image: busybox:1.35
extraInitContainers:
- name: new-init
image: alpine:3.18
asserts:
- lengthEqual:
path: spec.template.spec.initContainers
count: 2
- equal:
path: spec.template.spec.initContainers[0].name
value: legacy-init
- equal:
path: spec.template.spec.initContainers[1].name
value: new-init
- it: should prioritize extraInitContainers over initContainers
set:
initContainers:
- name: old-way
image: busybox:1.35
extraInitContainers:
- name: new-way
image: alpine:3.18
asserts:
- contains:
path: spec.template.spec.initContainers
content:
name: new-way
image: alpine:3.18
+15 -1
View File
@@ -303,7 +303,21 @@ metrics:
# -- Target labels to add to the scraped metrics
targetLabels: []
# -- additional init containers to run inside the pod.
# -- DEPRECATED: Use extraInitContainers instead. Will be removed after 2030.
# @deprecated - This parameter is deprecated, use extraInitContainers instead
initContainers: []
# -- Additional init containers to run inside the pod.
# Init containers run before the main application container starts.
# See: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
# Example:
# extraInitContainers:
# - name: init-config
# image: busybox:1.35
# command: ['sh', '-c', 'echo "Initializing..." && sleep 5']
# volumeMounts:
# - name: config
# mountPath: /config
extraInitContainers: []
# -- additional sidecar containers to run inside the pod.