apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: headlamp-apps namespace: argocd-ops spec: generators: # Utilise un générateur merge pour combiner : # 1. Les répertoires Helm existants (détermine quels environnements sont disponibles pour headlamp) # 2. Les fichiers de config partagés (pour obtenir name et server) - merge: generators: # Premier générateur : scanne uniquement les répertoires Helm qui existent pour headlamp - git: repoURL: https://git.gkdomaine.fr/kubernetes/argocd.git revision: main directories: - path: "helm/headlamp/*" # Deuxième générateur : lit les fichiers de config partagés # ApplicationSet utilisera seulement les fichiers config.json dont le basename # correspond à un répertoire Helm trouvé - git: repoURL: https://git.gkdomaine.fr/kubernetes/argocd.git revision: main files: - path: "configs/*/config.json" mergeKeys: - path.basename template: metadata: # Utilise path.basename qui vient du générateur git (plus fiable que environment du JSON) name: 'headlamp-{{path.basename}}' spec: # Utilise path.basename pour le projet (ou {{environment}} si disponible dans le JSON) project: '{{path.basename}}' source: repoURL: '{{repository}}' targetRevision: '{{targetRevision}}' # Construit explicitement le chemin Helm à partir du basename path: '{{helmPath}}/headlamp/{{path.basename}}' helm: valueFiles: - values.yaml destination: # Les variables {{name}} et {{server}} viennent du fichier config.json # (deuxième générateur du merge) name: '{{name}}' # server: '{{server}}' namespace: 'headlamp-{{path.basename}}' syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true