Files
helm-charts/zipline/values.yaml
T
jklein 40289a2e67 zipline: strict values.schema.json, ingress gate and null-safe hardening
Three changes, all about values that do not do what they promise:

1. values.schema.json (#68): additionalProperties: false on every
   chart-owned object level, so a key the chart does not read is rejected
   at render time instead of being silently ignored.

2. Ingress gate (#93): the Ingress template is wrapped in
   {{- if .Values.ingress.enabled }} and the key is added to values.yaml
   with default true, so behaviour is unchanged.

   As in rallly, ingress.domain is not a pure Ingress value: the
   StatefulSet also feeds it to CORE_DEFAULT_DOMAIN, the app's default
   domain for generated share links, and did so without required(). The
   guarantee only came from the ungated Ingress template, so the gate
   would have handed out unusable links silently. That read is now
   required() as well; only clusterIssuer becomes unnecessary.

3. Null-safety for hardening, probes and resources (#99): an erased block
   fell back to "securityContext: null" (unhardened), a vanished probe or
   a container without resource accounting. The rebuilt liveness probe
   keeps "/" rather than /api/healthcheck, so a database outage still does
   not restart the pod.

config stays deliberately not null-safe: storage and storageClass are
required(), which puts an erased block in the loud class #99 excludes.

Apart from an added comment, the rendered manifest is unchanged.
2026-08-23 21:07:11 +02:00

89 lines
2.9 KiB
YAML

# Scale the whole chart down without uninstalling it: scaleDown: true renders
# every Deployment/StatefulSet with replicas: 0 (and suspends CronJobs) and
# takes precedence over any per-workload replicas value. PVCs, Secrets and
# Services stay in place; scaleDown: false brings the workloads back up.
scaleDown: false
secrets:
databaseSecretRef: null
ziplineSecretRef: null
config:
storage: 50Gi
storageClass: longhorn
maxUploadFileSize: 30m
zipline:
# Replica count for this workload; 0 is allowed and scales it down.
# The chart-global scaleDown flag takes precedence.
replicas: 1
# The upstream image ships no dedicated user, but the Node.js server runs
# fine as an arbitrary non-root uid; fsGroup makes the uploads PVC writable.
securityContext:
pod:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
fsGroupChangePolicy: Always
container:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: true
capabilities:
drop:
- ALL
# Zipline v4 exposes /api/healthcheck (checks server and database health);
# the endpoint is enabled by default (config.features.healthcheck). Since it
# includes the database, it is used for readiness/startup only; liveness
# uses "/" so a database outage does not restart the pod.
livenessProbe:
httpGet:
path: /
port: zipline-server
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
readinessProbe:
httpGet:
path: /api/healthcheck
port: zipline-server
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# The startup probe gates liveness/readiness. Zipline runs database
# migrations on startup, so grant a generous budget: 10s * 30 = 300s.
startupProbe:
httpGet:
path: /api/healthcheck
port: zipline-server
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 30
resources:
# Limits are optional: memory and ephemeral-storage limits default to
# limitFactor x the request, an explicitly set limit always wins, and a
# CPU limit is only set when configured explicitly under "limits".
limitFactor: 3
requests:
cpu: 0.1
memory: 265Mi
ephemeralStorage: 100Mi
# Extra environment variables, appended to the ones the chart always sets.
# Rendered through tpl; value, secretKeyRef and configMapKeyRef forms are
# supported (see template-chart).
env: []
ingress:
# Set to false to omit the Ingress entirely. Note that ingress.domain stays
# required even then: it is also the app's default domain for generated
# share links (CORE_DEFAULT_DOMAIN), not just the Ingress host. Only
# clusterIssuer becomes unnecessary.
enabled: true
clusterIssuer: null
domain: null
className: nginx
# Extra annotations for the Ingress; merged with the cert-manager
# cluster-issuer and upload-size annotations the chart always sets.
annotations: {}