SSHKV_SEED_DEMO=1 legt sechs Demo-Hosts, drei Gruppen und einen Kunden an, damit Entwicklung, Screenshots und Handbuch ohne echte Server auskommen. Nur mit der Variable, damit eine echte Instanz nie Phantom-Hosts bekommt; Upsert nach Name haelt den Seed idempotent. Das Screenshot-Skript kennt jetzt Seiten mit wechselnder ID (folgen: erster passender Link) und nimmt Hostliste und Hostdetail auf. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
3.3 KiB
3.3 KiB
#008 Hosts und Hostgruppen
Status: erledigt Meilenstein: v0.1.0 Labels: backend, ui Geschätzt: 3 h Tatsächlich: 0,5 h
Ziel
Hosts und Hostgruppen anlegen, bearbeiten, archivieren; Kunden und Tags.
Aufgaben
- Liste mit Status (erreichbar, letzter Abgleich, Drift)
- Formular: Name, Adresse, Port, Gruppen, Tags, Beschreibung, Kunde, Anmeldebenutzer (
sshkv/root) - Hostgruppen mit Mitgliedern
- Hostdetail-Gerüst
Akzeptanzkriterien
- Leser sieht, Operator/Admin bearbeiten
Abhängigkeiten
#004
Notizen / Entscheidungen
- Schichtung: Regeln (zod-Schemas, Status-Ableitung) framework-frei in
src/lib/hosts.ts; Servicessrc/server/services/hosts.ts/hostgruppen.ts, Lesemodellesrc/server/queries/hosts.ts, Aktionensrc/server/actions/hosts.ts/hostgruppen.ts(gemeinsame Hilfen inactions/formular.ts, ohne"use server"). Die Action prüft vorab für Feldmeldungen, der Service prüft erneut (Seed, Skripte, spätere Assistenten). - Archivieren statt Löschen (
archiviertAm). Dabei fallen die Gruppenmitgliedschaften weg (im Protokoll festgehalten), damit Zuweisungen an Gruppen nie einen archivierten Host treffen. Archivierte Hosts sind schreibgeschützt und erscheinen in keiner Liste; der Name bleibt belegt, damit das Protokoll eindeutig bleibt. Wiederherstellen gibt es noch nicht. - Hostgruppen löschen bewusst noch nicht:
PublicVerwendunghängt per Cascade an der Gruppe; das Löschen klärt #016 zusammen mit den Verwendungen. - Kunde per Name: unbekannter Name legt den Kunden an (
kunde.angelegtim Protokoll), leer = kein Kunde. Gruppen- und Kundennamen erlauben Leerzeichen/Umlaute (reine Anzeige). - Protokoll:
host.angelegt,host.geaendert(nur geänderte Felder als{ vorher, nachher }, ohne Änderung kein Eintrag),host.archiviert,hostgruppe.angelegt,hostgruppe.geaendert(Mitglieder alshinzu/entfernt),kunde.angelegt. Demo-Seed schreibt bewusst keine Einträge. - Status in der Liste: nicht erreichbar > Drift (auch bei offenen Abweichungen) > synchron > unbekannt. Host-Key: ein ausstehender Key geht vor einem vertrauten, damit ein geänderter Key nicht hinter „bestätigt“ verschwindet.
- Formulare senden per
onSubmit+startTransitionstatt<form action>: sonst setzt React das Formular nach jeder Antwort zurück und Eingaben gingen bei Feldfehlern verloren.Feldhat dafürfehlerbekommen; neu sindTextbereich,Auswahlliste,Ankreuzfeld,Feldgruppe. - Mobil: Hostliste unter
mdals Kartenliste statt Tabelle (Status und Host-Key ohne seitliches Wischen sichtbar); Gruppenliste zeigt die Beschreibung unter dem Namen. - Platzhalter für Folge-Issues:
src/app/(app)/hosts/[id]/HostKeyAktionen.tsx(hostId,darfEntscheiden,status: HostKeyZusammenfassung, #009) im Kopf der Karte „Host-Key“ undBootstrapAktionen.tsx(hostId,darfVerwalten,eingerichtet,hostKeyVertraut, #010) unter der Info-Leiste – beide geben vorerstnullzurück. - Demo-Daten:
SSHKV_SEED_DEMO=1 pnpm db:seedlegt 6 Hosts, 3 Gruppen und einen Kunden an (Upsert nach Name, idempotent). - Screenshots:
scripts/screenshots.tskennthostsundhost-detail(folgt dem ersten Host der Liste).