[Phase 3] Implement dependency ordering with Kestra DAG #15

Open
opened 2025-12-20 15:45:16 +00:00 by Damien · 0 comments
Owner

Description

⚠️ Mise à jour : Avec Kestra, l'ordering des dépendances peut être géré via le task type io.kestra.core.tasks.flows.Dag qui calcule automatiquement l'ordre d'exécution basé sur les dependsOn.

Implémenter l'ordering des dépendances pour s'assurer que les changements sont appliqués dans le bon ordre.

Problème

Certains éléments de configuration dépendent d'autres :

  • VLAN doit exister avant le mapping VLAN-to-VNI
  • VRF doit exister avant qu'une interface puisse y être assignée
  • Le processus BGP doit exister avant d'ajouter des neighbors
  • Le Loopback doit exister avant d'être utilisé comme BGP update-source

Solution avec Kestra DAG

tasks:
  - id: config_dag
    type: io.kestra.core.tasks.flows.Dag
    tasks:
      # Level 1: Base infrastructure
      - task:
          id: create_vlans
          type: io.kestra.plugin.scripts.python.Script
          script: |
            # Create VLANs via gNMI

      - task:
          id: create_vrfs
          type: io.kestra.plugin.scripts.python.Script
          script: |
            # Create VRF instances via gNMI

      - task:
          id: create_loopbacks
          type: io.kestra.plugin.scripts.python.Script
          script: |
            # Create Loopback interfaces

      # Level 2: Depends on Level 1
      - task:
          id: create_svis
          type: io.kestra.plugin.scripts.python.Script
          script: |
            # Create SVI interfaces
        dependsOn:
          - create_vlans
          - create_vrfs

      - task:
          id: create_vxlan_vnis
          type: io.kestra.plugin.scripts.python.Script
          script: |
            # Create VXLAN VNI mappings
        dependsOn:
          - create_vlans

      # Level 3: Depends on Level 2
      - task:
          id: configure_bgp
          type: io.kestra.plugin.scripts.python.Script
          script: |
            # Configure BGP process and neighbors
        dependsOn:
          - create_loopbacks
          - create_vrfs

      # Level 4: Final configuration
      - task:
          id: configure_evpn
          type: io.kestra.plugin.scripts.python.Script
          script: |
            # Configure BGP EVPN
        dependsOn:
          - configure_bgp
          - create_vxlan_vnis

Ordre des dépendances (Création)

Level 1 (parallèle):
├── VLANs
├── VRF instances
└── Loopback interfaces

Level 2 (dépend de L1):
├── SVI interfaces (← VLANs, VRFs)
├── Physical/Port-channel interfaces
└── VXLAN VNI mappings (← VLANs)

Level 3 (dépend de L2):
└── BGP process + neighbors (← Loopbacks, VRFs)

Level 4 (dépend de L3):
└── BGP EVPN configuration (← BGP, VXLAN)

Ordre inverse pour les suppressions

Les suppressions doivent suivre l'ordre inverse :

  1. BGP EVPN
  2. BGP neighbors
  3. SVIs, VXLAN VNIs
  4. VLANs, VRFs, Loopbacks

Tasks

  • Définir le graphe de dépendances dans src/yang/dependencies.py
  • Créer la structure DAG dans le workflow Kestra
  • Implémenter la logique de tri pour les créations
  • Implémenter la logique de tri inverse pour les suppressions
  • Gérer les dépendances circulaires (erreur explicite)
  • Tests unitaires du graphe de dépendances

Output

  • src/yang/dependencies.py - Définition du graphe
  • kestra/flows/fabric-reconcile.yml - DAG task intégré
## Description > ⚠️ **Mise à jour** : Avec Kestra, l'ordering des dépendances peut être géré via le task type `io.kestra.core.tasks.flows.Dag` qui calcule automatiquement l'ordre d'exécution basé sur les `dependsOn`. Implémenter l'ordering des dépendances pour s'assurer que les changements sont appliqués dans le bon ordre. ## Problème Certains éléments de configuration dépendent d'autres : - VLAN doit exister avant le mapping VLAN-to-VNI - VRF doit exister avant qu'une interface puisse y être assignée - Le processus BGP doit exister avant d'ajouter des neighbors - Le Loopback doit exister avant d'être utilisé comme BGP update-source ## Solution avec Kestra DAG ```yaml tasks: - id: config_dag type: io.kestra.core.tasks.flows.Dag tasks: # Level 1: Base infrastructure - task: id: create_vlans type: io.kestra.plugin.scripts.python.Script script: | # Create VLANs via gNMI - task: id: create_vrfs type: io.kestra.plugin.scripts.python.Script script: | # Create VRF instances via gNMI - task: id: create_loopbacks type: io.kestra.plugin.scripts.python.Script script: | # Create Loopback interfaces # Level 2: Depends on Level 1 - task: id: create_svis type: io.kestra.plugin.scripts.python.Script script: | # Create SVI interfaces dependsOn: - create_vlans - create_vrfs - task: id: create_vxlan_vnis type: io.kestra.plugin.scripts.python.Script script: | # Create VXLAN VNI mappings dependsOn: - create_vlans # Level 3: Depends on Level 2 - task: id: configure_bgp type: io.kestra.plugin.scripts.python.Script script: | # Configure BGP process and neighbors dependsOn: - create_loopbacks - create_vrfs # Level 4: Final configuration - task: id: configure_evpn type: io.kestra.plugin.scripts.python.Script script: | # Configure BGP EVPN dependsOn: - configure_bgp - create_vxlan_vnis ``` ## Ordre des dépendances (Création) ``` Level 1 (parallèle): ├── VLANs ├── VRF instances └── Loopback interfaces Level 2 (dépend de L1): ├── SVI interfaces (← VLANs, VRFs) ├── Physical/Port-channel interfaces └── VXLAN VNI mappings (← VLANs) Level 3 (dépend de L2): └── BGP process + neighbors (← Loopbacks, VRFs) Level 4 (dépend de L3): └── BGP EVPN configuration (← BGP, VXLAN) ``` ## Ordre inverse pour les suppressions Les suppressions doivent suivre l'ordre inverse : 1. BGP EVPN 2. BGP neighbors 3. SVIs, VXLAN VNIs 4. VLANs, VRFs, Loopbacks ## Tasks - [ ] Définir le graphe de dépendances dans `src/yang/dependencies.py` - [ ] Créer la structure DAG dans le workflow Kestra - [ ] Implémenter la logique de tri pour les créations - [ ] Implémenter la logique de tri inverse pour les suppressions - [ ] Gérer les dépendances circulaires (erreur explicite) - [ ] Tests unitaires du graphe de dépendances ## Output - `src/yang/dependencies.py` - Définition du graphe - `kestra/flows/fabric-reconcile.yml` - DAG task intégré
Damien added the phase-3-full-fabric label 2025-12-20 15:45:55 +00:00
Damien changed title from [Phase 3] Implement dependency ordering for changes to [Phase 3] Implement dependency ordering with Kestra DAG 2026-01-10 13:08:47 +00:00
Sign in to join this conversation.