fix(argocd): url-shortener enfin syncable — ignorer le volumeName épinglé de son PVC #44

Merged
arcodange merged 1 commits from arcodange/url-shortener-pvc-sync into main 2026-07-25 10:49:43 +02:00
Owner

Le SyncError permanent

url-shortener était la seule app OutOfSync du cluster, en échec de sync en boucle malgré automated+selfHeal. Message ArgoCD :

PersistentVolumeClaim "url-shortener" is invalid: spec: Forbidden: spec is immutable after creation
- "VolumeName": "pvc-cdd434d1-…"   (live)
+ "VolumeName": ""                 (désiré)

Le PVC live porte un spec.volumeName épinglé (rebind du volume Longhorn — vraisemblablement lors de la restauration post-drill coupure de courant) que le chart ne déclare pas. Le merge 3-way tente donc de le vider à chaque sync → refus API (champ immuable) → échec éternel.

Changements

  • argocd/templates/apps.yaml : passthrough générique ignoreDifferences et syncOptions additionnels par app (réutilisable pour tout futur champ immuable).
  • argocd/values.yaml : pour url-shortener, ignorer /spec/volumeName du PVC + RespectIgnoreDifferences=true — l'apply réinjecte alors la valeur live au lieu de la vider (le mécanisme documenté d'ArgoCD précisément pour ce cas : clusterIP, volumeName…).

Validation

Rendu helm template diffé contre main : seule l'Application url-shortener gagne les deux blocs, toutes les autres apps sont rendues à l'identique. Après merge, l'app-of-apps propage, puis le prochain sync d'url-shortener doit passer sans toucher au volume (aucun risque pour la base SQLite — on arrête justement d'essayer de modifier le PVC).

🤖 Generated with Claude Code

## Le SyncError permanent `url-shortener` était la seule app OutOfSync du cluster, en échec de sync **en boucle** malgré `automated+selfHeal`. Message ArgoCD : ``` PersistentVolumeClaim "url-shortener" is invalid: spec: Forbidden: spec is immutable after creation - "VolumeName": "pvc-cdd434d1-…" (live) + "VolumeName": "" (désiré) ``` Le PVC live porte un `spec.volumeName` épinglé (rebind du volume Longhorn — vraisemblablement lors de la restauration post-drill coupure de courant) que le chart ne déclare pas. Le merge 3-way tente donc de le **vider** à chaque sync → refus API (champ immuable) → échec éternel. ## Changements - `argocd/templates/apps.yaml` : passthrough générique **`ignoreDifferences`** et **`syncOptions`** additionnels par app (réutilisable pour tout futur champ immuable). - `argocd/values.yaml` : pour `url-shortener`, ignorer `/spec/volumeName` du PVC **+ `RespectIgnoreDifferences=true`** — l'apply réinjecte alors la valeur live au lieu de la vider (le mécanisme documenté d'ArgoCD précisément pour ce cas : `clusterIP`, `volumeName`…). ## Validation Rendu `helm template` diffé contre main : seule l'Application `url-shortener` gagne les deux blocs, toutes les autres apps sont rendues à l'identique. Après merge, l'app-of-apps propage, puis le prochain sync d'url-shortener doit passer **sans toucher au volume** (aucun risque pour la base SQLite — on arrête justement d'essayer de modifier le PVC). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
arcodange added 1 commit 2026-07-25 10:47:55 +02:00
L'app url-shortener était en SyncError permanent : son PVC live porte un
spec.volumeName épinglé (rebind du volume Longhorn après le drill coupure de
courant) absent du chart ; chaque sync tentait donc de le vider, refus API
(spec immuable après création), échec en boucle malgré automated+selfHeal.

- apps.yaml : passthrough générique ignoreDifferences + syncOptions par app.
- values.yaml : url-shortener ignore /spec/volumeName du PVC, avec
  RespectIgnoreDifferences=true pour que l'apply réinjecte la valeur live au
  lieu de la vider (le cas d'usage documenté d'ArgoCD pour les champs
  immuables).

Rendu helm vérifié : seule l'Application url-shortener change.

Co-Authored-By: Claude Fable 5 <[email protected]>
arcodange merged commit b06b7e79ac into main 2026-07-25 10:49:43 +02:00
arcodange deleted branch arcodange/url-shortener-pvc-sync 2026-07-25 10:49:43 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: arcodange-org/factory#44