ROADMAP â der rostige Sammler tappst sich ran đŸ
RĂŒckwĂ€rts abgesichert: read-only vor DryRun, DryRun vor Approved,
ein Node vor der Netzmaske. Jede Stufe hat ein Gate gegen bekannte Wahrheit
und einen RĂŒckweg. Die Katze schmunzelt, wenn wir langsam gehen.
Referenz-Orakel: die Ansible-inventar/*_v4.json. Der Rust-Sammler muss
dieselbe Form liefern â solange nicht, geht keine Stufe weiter.
Reale Infrastruktur
- Control-Node: Jetson
jetpack(aarch64-unknown-linux-gnu) - Erstes Ziel:
crumbzero01(read-only Service-User, Key-Auth) - Ziel-NetBox: CrumbForest (durch die Null gebaut)
Stufe 0 â Sammler auf den Jetson
Binary auf jetpack, Key erzeugt & public verteilt, Sammler-User angelegt.
- Build direkt auf dem Jetson (cargo build --release) oder cross.
- ed25519-Key auf dem Jetson, read-only User pro Node, kein root (nur die
enge dmidecode-sudoers-Allowlist).
- Der Sammler-User ist jetzt prÀzise: siehe docs/sammler-user.md.
Provisionierung klassisch curl/bash: provisioning/sammler-user.sh
+ provisioning/sammler.sudoers.
- Sweep{ cidr, ports } als Datei â die Netzmaske IST Passkante Schritt 1.
- Gate: Binary lĂ€uft, zeigt Pipeline. RĂŒckweg: kein Node berĂŒhrt.
Stufe 1 â Ein Node, read-only (Schnitt 2: net + ssh + probe)
crumbzero01 per Key, Probes fahren, crumbzero01_raw.json schreiben.
- Gate (der Dreh- und Angelpunkt):
diff <(jq -S . crumbzero01_raw.json) <(jq -S . inventar/crumbzero01_v4.json)
- RĂŒckweg: read-only, nichts auf dem Node geschrieben.
Stufe 2 â Transform + Klassifizierung, DryRun (Schnitt 3)
raw.json â NetBoxDevice, Passkante klassifiziert, Checkpoint gedruckt.
- size_to_gb isoliert per Unit-Test (die TBâGB-Fehlerstelle).
- Gate: Klasse + Umrechnung stimmen. RĂŒckweg: Confirm::DryRun = Default.
Stufe 3 â Ein Node, echter Import (Schnitt 4: sink)
crumbzero01 allein, Confirm::Approved, genau ein Pass, idempotenter Upsert.
- Gate: Node korrekt in NetBox, zweiter Lauf Àndert nichts.
- RĂŒckweg: ein Node, per Hand löschbar.
Stufe 4 â Die Netzmaske (Voll-Pipeline)
Ganzer CIDR, stumme Nodes werden geloggt & ĂŒbersprungen. Eine Checkpoint-
Tabelle fĂŒr alle, dann sink::Pass::ORDER: PVE â VMs â Bare-Metal.
- Gate: Bestand + Kollisionen abgeglichen. RĂŒckweg: NetBox-DB-Snapshot vorher.
Stufe 5 â Betrieb
Idempotente Re-Runs als Drift-Check. crew-Logs pro Lauf in runs/.
KrĂŒmel-Namen in meta.contributors.
Kritischer Pfad
Schnitt 2 (net+ssh+probe) ââș Stufe 1 Verify gegen v4.json = Vertrauen
Schnitt 3 (transform) ââș Stufe 2 size_to_gb testen = kein Datenverlust
Schnitt 4 (sink) ââș Stufe 3 ein Node = kleiner RĂŒckweg
Voll-Pipeline ââș Stufe 4 Checkpoint = Fragen vor Import
Tapser-Reihenfolge innerhalb Schnitt 2
Was offline testbar ist, kommt zuerst â die Katze mag ehrliche Schritte:
1. net::Sweep::targets() â CIDR Ă Ports, rein testbar â
2. probe::parse â os-release / lsblk / dmidecode Parser, gegen Sample-Ausgaben getestet â
3. ssh::Session â Key-Auth + exec; nur auf dem Jetson gegen crumbzero01 verifizierbar âł
4. probe::collect â verdrahtet 1â3 zum raw.json