Contexte
En configurant un PodDisruptionBudget sur le chart Helm d’Apache Superset, helm template plantait dès que je passais podDisruptionBudget.enabled: true. Pas seulement la ressource PDB : tout le rendu du chart s’arrêtait.
Ce que j’ai appris
Le chart livrait à la fois minAvailable: 1 et maxUnavailable: 1 par défaut, alors que ses propres templates fail le rendu dès que les deux sont renseignés en même temps.
Détails
Reproduction sur le chart publié :
helm repo add superset https://apache.github.io/superset
helm repo update
cat > pdb-repro.yaml <<'YAML'
supersetNode:
podDisruptionBudget:
enabled: true
YAML
helm template superset superset/superset --version 0.22.4 -f pdb-repro.yaml
# Error: execution error at (superset/templates/pdb.yaml:22:4):
# Only one of minAvailable or maxUnavailable should be set
Le garde-fou incriminé, dans templates/pdb.yaml :
{{- if and .minAvailable .maxUnavailable }}
{{- fail "Only one of minAvailable or maxUnavailable should be set" }}
{{- end}}
… alors que values.yaml livrait les deux champs à 1 pour les six blocs concernés (supersetNode, supersetWorker, supersetCeleryBeat, supersetCeleryFlower, supersetWebsockets, supersetMcp).
J’ai ouvert une issue documentant le problème et la reproduction, puis une pull request qui met maxUnavailable à null par défaut dans les six blocs (le chart rend alors un PDB avec son propre minAvailable: 1, sans y toucher pour qui utilise déjà maxUnavailable explicitement), garde le garde-fou pour le cas où les deux sont vraiment renseignés, améliore son message d’erreur pour qu’il nomme le champ et le composant concernés, et ajoute une suite de tests helm-unittest sur les six templates PDB.
Pourquoi c’est utile
Au-delà du fix lui-même, ça m’a fait passer par tout le cycle d’une contribution à un projet Apache : isoler un bug reproductible indépendamment de mon propre usage, l’écrire pour des mainteneurs qui ne connaissent pas mon contexte, proposer un correctif non cassant plutôt que juste signaler le problème, et l’accompagner de tests qui prouvent la régression.
