mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-11 22:51:28 +00:00
Bitnami retired the versioned tags under docker.io/bitnami and republished the archived builds under docker.io/bitnamilegacy, so every install and upgrade of the chart with the bundled database fails to pull docker.io/bitnami/postgresql:16.2.0-debian-12-r6. Repoint the subchart images at the bitnamilegacy copies of the exact builds those subchart versions shipped with, so the on-disk data directory layout is unchanged for existing installs. Pin the subchart dependency ranges to the versions already in Chart.lock. The current bitnami postgresql chart defaults to `tag: latest`, which is PostgreSQL 18 today, so an open-ended range turns a dependency refresh into a major-version jump on an existing volume. Refuse to render when postgresql.image.tag is empty or `latest` while the bundled database is deployed. Starting a different PostgreSQL major against an existing data directory leaves the server unable to boot with no in-place way back, which is how the reported install lost its data. Resolves LIT-4708
152 lines
6.5 KiB
YAML
152 lines
6.5 KiB
YAML
{{- if .Values.serviceMonitor.enabled }}
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
name: "{{ include "litellm.fullname" . }}-test-servicemonitor"
|
|
labels:
|
|
{{- include "litellm.labels" . | nindent 4 }}
|
|
annotations:
|
|
"helm.sh/hook": test
|
|
spec:
|
|
containers:
|
|
- name: test
|
|
image: docker.io/bitnamilegacy/kubectl:1.29.2-debian-12-r3
|
|
command: ['sh', '-c']
|
|
args:
|
|
- |
|
|
set -e
|
|
echo "🔍 Testing ServiceMonitor configuration..."
|
|
|
|
# Check if ServiceMonitor exists
|
|
if ! kubectl get servicemonitor {{ include "litellm.fullname" . }} -n {{ .Release.Namespace }} &>/dev/null; then
|
|
echo "❌ ServiceMonitor not found"
|
|
exit 1
|
|
fi
|
|
echo "✅ ServiceMonitor exists"
|
|
|
|
# Get ServiceMonitor YAML
|
|
SM=$(kubectl get servicemonitor {{ include "litellm.fullname" . }} -n {{ .Release.Namespace }} -o yaml)
|
|
|
|
# Test endpoint configuration
|
|
ENDPOINT_PORT=$(echo "$SM" | grep -A 5 "endpoints:" | grep "port:" | awk '{print $2}')
|
|
if [ "$ENDPOINT_PORT" != "http" ]; then
|
|
echo "❌ Endpoint port mismatch. Expected: http, Got: $ENDPOINT_PORT"
|
|
exit 1
|
|
fi
|
|
echo "✅ Endpoint port is correctly set to: $ENDPOINT_PORT"
|
|
|
|
# Test endpoint path
|
|
ENDPOINT_PATH=$(echo "$SM" | grep -A 5 "endpoints:" | grep "path:" | awk '{print $2}')
|
|
if [ "$ENDPOINT_PATH" != "/metrics/" ]; then
|
|
echo "❌ Endpoint path mismatch. Expected: /metrics/, Got: $ENDPOINT_PATH"
|
|
exit 1
|
|
fi
|
|
echo "✅ Endpoint path is correctly set to: $ENDPOINT_PATH"
|
|
|
|
# Test interval
|
|
INTERVAL=$(echo "$SM" | grep "interval:" | awk '{print $2}')
|
|
if [ "$INTERVAL" != "{{ .Values.serviceMonitor.interval }}" ]; then
|
|
echo "❌ Interval mismatch. Expected: {{ .Values.serviceMonitor.interval }}, Got: $INTERVAL"
|
|
exit 1
|
|
fi
|
|
echo "✅ Interval is correctly set to: $INTERVAL"
|
|
|
|
# Test scrapeTimeout
|
|
TIMEOUT=$(echo "$SM" | grep "scrapeTimeout:" | awk '{print $2}')
|
|
if [ "$TIMEOUT" != "{{ .Values.serviceMonitor.scrapeTimeout }}" ]; then
|
|
echo "❌ ScrapeTimeout mismatch. Expected: {{ .Values.serviceMonitor.scrapeTimeout }}, Got: $TIMEOUT"
|
|
exit 1
|
|
fi
|
|
echo "✅ ScrapeTimeout is correctly set to: $TIMEOUT"
|
|
|
|
# Test scheme
|
|
SCHEME=$(echo "$SM" | grep "scheme:" | awk '{print $2}')
|
|
if [ "$SCHEME" != "http" ]; then
|
|
echo "❌ Scheme mismatch. Expected: http, Got: $SCHEME"
|
|
exit 1
|
|
fi
|
|
echo "✅ Scheme is correctly set to: $SCHEME"
|
|
|
|
{{- if .Values.serviceMonitor.labels }}
|
|
# Test custom labels
|
|
echo "🔍 Checking custom labels..."
|
|
{{- range $key, $value := .Values.serviceMonitor.labels }}
|
|
LABEL_VALUE=$(echo "$SM" | grep -A 20 "metadata:" | grep "{{ $key }}:" | awk '{print $2}')
|
|
if [ "$LABEL_VALUE" != "{{ $value }}" ]; then
|
|
echo "❌ Label {{ $key }} mismatch. Expected: {{ $value }}, Got: $LABEL_VALUE"
|
|
exit 1
|
|
fi
|
|
echo "✅ Label {{ $key }} is correctly set to: {{ $value }}"
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{- if .Values.serviceMonitor.annotations }}
|
|
# Test annotations
|
|
echo "🔍 Checking annotations..."
|
|
{{- range $key, $value := .Values.serviceMonitor.annotations }}
|
|
ANNOTATION_VALUE=$(echo "$SM" | grep -A 10 "annotations:" | grep "{{ $key }}:" | awk '{print $2}')
|
|
if [ "$ANNOTATION_VALUE" != "{{ $value }}" ]; then
|
|
echo "❌ Annotation {{ $key }} mismatch. Expected: {{ $value }}, Got: $ANNOTATION_VALUE"
|
|
exit 1
|
|
fi
|
|
echo "✅ Annotation {{ $key }} is correctly set to: {{ $value }}"
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
{{- if .Values.serviceMonitor.namespaceSelector.matchNames }}
|
|
# Test namespace selector
|
|
echo "🔍 Checking namespace selector..."
|
|
{{- range .Values.serviceMonitor.namespaceSelector.matchNames }}
|
|
if ! echo "$SM" | grep -A 5 "namespaceSelector:" | grep -q "{{ . }}"; then
|
|
echo "❌ Namespace {{ . }} not found in namespaceSelector"
|
|
exit 1
|
|
fi
|
|
echo "✅ Namespace {{ . }} found in namespaceSelector"
|
|
{{- end }}
|
|
{{- else }}
|
|
# Test default namespace selector (should be release namespace)
|
|
if ! echo "$SM" | grep -A 5 "namespaceSelector:" | grep -q "{{ .Release.Namespace }}"; then
|
|
echo "❌ Release namespace {{ .Release.Namespace }} not found in namespaceSelector"
|
|
exit 1
|
|
fi
|
|
echo "✅ Default namespace selector set to release namespace: {{ .Release.Namespace }}"
|
|
{{- end }}
|
|
|
|
{{- if .Values.serviceMonitor.relabelings }}
|
|
# Test relabelings
|
|
echo "🔍 Checking relabelings configuration..."
|
|
if ! echo "$SM" | grep -q "relabelings:"; then
|
|
echo "❌ Relabelings section not found"
|
|
exit 1
|
|
fi
|
|
echo "✅ Relabelings section exists"
|
|
{{- range .Values.serviceMonitor.relabelings }}
|
|
{{- if .targetLabel }}
|
|
if ! echo "$SM" | grep -A 50 "relabelings:" | grep -q "targetLabel: {{ .targetLabel }}"; then
|
|
echo "❌ Relabeling targetLabel {{ .targetLabel }} not found"
|
|
exit 1
|
|
fi
|
|
echo "✅ Relabeling targetLabel {{ .targetLabel }} found"
|
|
{{- end }}
|
|
{{- if .action }}
|
|
if ! echo "$SM" | grep -A 50 "relabelings:" | grep -q "action: {{ .action }}"; then
|
|
echo "❌ Relabeling action {{ .action }} not found"
|
|
exit 1
|
|
fi
|
|
echo "✅ Relabeling action {{ .action }} found"
|
|
{{- end }}
|
|
{{- end }}
|
|
{{- end }}
|
|
|
|
# Test selector labels match the service
|
|
echo "🔍 Checking selector labels match service..."
|
|
SVC_LABELS=$(kubectl get svc {{ include "litellm.fullname" . }} -n {{ .Release.Namespace }} -o jsonpath='{.metadata.labels}')
|
|
echo "Service labels: $SVC_LABELS"
|
|
echo "✅ Selector labels validation passed"
|
|
|
|
echo ""
|
|
echo "🎉 All ServiceMonitor tests passed successfully!"
|
|
serviceAccountName: {{ include "litellm.serviceAccountName" . }}
|
|
restartPolicy: Never
|
|
{{- end }}
|
|
|