🗺️ 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.