apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: longhorn-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 longhorn)
    # 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 longhorn
          - git:
              repoURL: https://git.gkdomaine.fr/kubernetes/argocd.git
              revision: main
              directories:
                - path: "helm/longhorn/*"
          # 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: 'longhorn-{{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}}/longhorn/{{path.basename}}'
        helm:
          valueFiles:
            - values.yaml
          values: |
            longhorn:
              defaultBackupStore:
                backupTarget: "nfs://10.78.107.107:/SAUVEGARDES/KUBERNETES/{{path.basename}}"
      destination:
        # Les variables {{name}} et {{server}} viennent du fichier config.json
        # (deuxième générateur du merge)
        name: '{{name}}'
        # server: '{{server}}'
        namespace: 'longhorn-{{path.basename}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
          - CreateNamespace=true
          # Si le hook pre-upgrade est bloqué, décommentez la ligne suivante pour l'ignorer :
          - SkipHooks=true
          # Note: Les hooks de pré-upgrade Longhorn peuvent être importants,
          # vérifiez d'abord pourquoi le Job est bloqué avant de les ignorer