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

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]>
This commit is contained in:
2026-07-25 10:47:34 +02:00
co-authored by Claude Fable 5
parent 1ed3154668
commit 73bf7d1170
2 changed files with 20 additions and 0 deletions
+11
View File
@@ -24,6 +24,14 @@ spec:
destination:
server: https://kubernetes.default.svc
namespace: {{ $ns }}
{{- /* Champs à exclure du diff (ex: /spec/volumeName d'un PVC rebindé à la
main après le drill coupure de courant — immuable côté API). À coupler
avec la syncOption RespectIgnoreDifferences=true pour que l'apply
réinjecte la valeur live au lieu de tenter de la vider. */}}
{{- with $app_attr.ignoreDifferences }}
ignoreDifferences:
{{- toYaml . | nindent 4 }}
{{- end }}
syncPolicy:
{{- if $app_attr.syncPolicy }}
{{- toYaml $app_attr.syncPolicy | nindent 4 }}
@@ -34,6 +42,9 @@ spec:
{{- end }}
syncOptions:
- CreateNamespace=true
{{- range $app_attr.syncOptions }}
- {{ . }}
{{- end }}
{{- /*
Non-prod environments (ADR-0002 elision rule): one extra Application per env
under `<app_attr>.envs`. Each renders the SAME repo + chart, overlaid with
+9
View File
@@ -4,6 +4,15 @@
gitea_applications:
url-shortener:
annotations: {}
# Le PVC live a un spec.volumeName épinglé (rebind du volume Longhorn) que
# le chart ne déclare pas : sans ceci, chaque sync tente de le vider et
# l'API le refuse (spec immuable) → SyncError permanent.
ignoreDifferences:
- kind: PersistentVolumeClaim
jsonPointers:
- /spec/volumeName
syncOptions:
- RespectIgnoreDifferences=true
tools:
annotations: {}
syncPolicy: