🗺️ NetBox Migration Pipeline Workflow

Dieses Dokument zeigt den vollständigen Datenfluss und die Verarbeitungsstufen der Erstmigration, basierend auf den Beispieldaten im Inventar.

flowchart TD
    %% Styling
    classDef playbook fill:#283593,stroke:#1a237e,color:#ffffff,stroke-width:2px;
    classDef script fill:#ef6c00,stroke:#e65100,color:#ffffff,stroke-width:2px;
    classDef file fill:#37474f,stroke:#263238,color:#ffffff,stroke-width:1px;
    classDef stage fill:#2e7d32,stroke:#1b5e20,color:#ffffff,stroke-width:2px;

    subgraph Phase1["Phase 1: Audit & Datenerfassung"]
        hosts[Live-Hosts in group 'crumbforest']
        doktor[netbox_doktor.yml]:::playbook
        facts[serverfacts_v5.yml]:::playbook
        report_doktor[netbox_doktor_report.md]:::file
        raw_jsons[inventar/*_v4.json]:::file

        hosts -->|Check conflicts| doktor
        doktor -->|Write audit| report_doktor
        hosts -->|Gather facts| facts
        facts -->|Write payloads| raw_jsons
    end

    subgraph Phase2["Phase 2: Klassifizierung & Checkpoint"]
        classify[scripts/classify_nodes.py]:::script
        sub1[inventar/1_pve_cluster/]:::file
        sub2[inventar/2_vms/]:::file
        sub3[inventar/3_bare_metal/]:::file
        checkpoint["Human-in-the-Loop Checkpoint (Manuelle Korrektur)"]:::stage

        raw_jsons --> classify
        classify -->|is_virtual=false + has pve| sub1
        classify -->|is_virtual=true| sub2
        classify -->|Rest| sub3

        sub1 & sub2 & sub3 --> checkpoint
    end

    subgraph Phase3["Phase 3: 3-Pass Import & Bereinigung"]
        pass1[01_import_pve.yml]:::playbook
        pass2[02_import_vms.yml]:::playbook
        pass3[03_import_bare_metal.yml]:::playbook

        checkpoint -->|Pass 1| pass1
        pass1 -->|Erzeugt Cluster & PVE Hosts| netbox_db[(NetBox Database)]

        checkpoint -->|Pass 2| pass2
        pass2 -->|1. Löscht stray physische Devices| netbox_db
        pass2 -->|2. Erzeugt VMs mit TB/MB Disk-Konvertierung| netbox_db

        checkpoint -->|Pass 3| pass3
        pass3 -->|1. Löscht stray VMs| netbox_db
        pass3 -->|2. Erzeugt Bare-Metal-Devices & Interfaces| netbox_db
    end

    subgraph Phase4["Phase 4: Post-Flight & Report"]
        query[query_inventory_ozmai.yml]:::playbook
        report_final[netbox_inventory_report.md]:::file

        netbox_db --> query
        query -->|Schreibt Bestand & Kollisionen| report_final
    end

📋 Ablaufschritte am Beispiel der Sample-Daten

Datei Klassifizierung Import-Pfad Besonderheiten
pve01.sample_v4.json 1_pve_cluster Pass 1 (01_import_pve.yml) Legt Proxmox VE Cluster an. Ermittelt physische 10G-Interfaces.
vm01.sample_v4.json 2_vms Pass 2 (02_import_vms.yml) Bereinigt ein eventuell existierendes physisches Device gleichen Namens. Rechnet TB-Platten in GB um. Weist Rolle "Server" zu.
srv01.sample_v4.json 3_bare_metal Pass 3 (03_import_bare_metal.yml) Bereinigt eine eventuell existierende VM gleichen Namens. Legt physischen Supermicro-Server mit 10G-Ports an.

Alte Schlangen, neue Bäume

Wenn eine Schlange älter ist als der Baum, wird Kommunikation schwierig.

Manchmal spricht ein alter Knoten Python 3.6.
Manchmal erwartet ein neues Werkzeug Python 3.9.
Manchmal ist der Fehler kein kaputter Baum, sondern eine Sprache, die zu schnell weitergezogen ist.

Dann hilft kein Zwang.

Dann hilft eine neue Kante.

Raw statt setup.
Rust neben Python.
Lesen vor Schreiben.
Fragen vor Import.

So können alte Schlangen wieder Bäume lesen.

Und neue Bäume lernen, dass Luft nicht gesucht werden muss.

Luft wächst auf Bäumen.

Der Wald atmet, wenn seine Teile resonieren.