platform-docs/architecture/09-data-model-v1.md

4.3 KiB

Tuxflotte Datenmodell v1

Zweck

Das Datenmodell beschreibt die persistenten Kernobjekte der Tuxflotte-Plattform und ihre Beziehungen.

Die konkrete SQL-Implementierung und das Migrationssystem werden getrennt von diesem fachlichen Modell behandelt.

Kernobjekte

  • Organization
  • Device
  • Hardware Snapshot
  • Network Interface
  • Storage Device
  • Workspace
  • Backend
  • Assignment
  • Network Profile
  • Secret Reference

Organization

Eine Organization beschreibt eine organisatorische Einheit innerhalb der Tuxflotte-Plattform.

Eine Organization besitzt eigene Geräte, Workspaces, Netzwerkprofile und Richtlinien.

Attribute:

  • id
  • name
  • created_at
  • updated_at

Beziehungen:

  • besitzt mehrere Devices
  • besitzt mehrere Workspaces
  • besitzt mehrere Network Profiles
  • referenziert Secrets

Device

Ein Device repräsentiert ein dauerhaft bekanntes physisches oder virtuelles Gerät.

Die interne Geräte-ID ist unabhängig von Hardwaremerkmalen.

Der Hardware-Fingerprint dient der Wiedererkennung während des Provisioning-Handshakes.

Attribute:

  • id
  • organization_id
  • device_fingerprint
  • hostname
  • created_at
  • last_seen

Beziehungen:

  • gehört zu genau einer Organization
  • besitzt mehrere Hardware Snapshots
  • besitzt optional ein Assignment

Hardware Snapshot

Ein Hardware Snapshot beschreibt den zu einem bestimmten Zeitpunkt erfassten Hardwarezustand eines Devices.

Hardware Snapshots sind zeitbezogene Inventardaten und nicht Bestandteil der stabilen Geräteidentität.

Attribute:

  • id
  • device_id
  • collected_at
  • architecture
  • manufacturer
  • product_name
  • product_version
  • system_uuid
  • system_serial
  • board_vendor
  • board_name
  • board_serial
  • bios_vendor
  • bios_version
  • boot_mode
  • secure_boot
  • tpm_version
  • cpu_model
  • cpu_logical_count
  • memory_bytes

Beziehungen:

  • gehört zu genau einem Device
  • besitzt mehrere Network Interfaces
  • besitzt mehrere Storage Devices

Network Interface

Ein Network Interface beschreibt eine zum Zeitpunkt des Hardware Snapshots vorhandene Netzwerkschnittstelle.

Attribute:

  • id
  • hardware_snapshot_id
  • name
  • type
  • mac_address

Beziehungen:

  • gehört zu genau einem Hardware Snapshot

Storage Device

Ein Storage Device beschreibt einen zum Zeitpunkt des Hardware Snapshots vorhandenen Massenspeicher.

Attribute:

  • id
  • hardware_snapshot_id
  • model
  • serial
  • size_bytes
  • transport
  • name

Beziehungen:

  • gehört zu genau einem Hardware Snapshot

Relationales Schema v1

organizations

Spalten:

  • id
  • name
  • created_at
  • updated_at

devices

Spalten:

  • id
  • organization_id
  • device_fingerprint
  • hostname
  • created_at
  • last_seen

Beziehungen:

  • organization_id referenziert organizations.id

Constraints:

  • device_fingerprint ist eindeutig

hardware_snapshots

Spalten:

  • id
  • device_id
  • collected_at
  • architecture
  • manufacturer
  • product_name
  • product_version
  • system_uuid
  • system_serial
  • board_vendor
  • board_name
  • board_serial
  • bios_vendor
  • bios_version
  • boot_mode
  • secure_boot
  • tpm_version
  • cpu_model
  • cpu_logical_count
  • memory_bytes

Beziehungen:

  • device_id referenziert devices.id

network_interfaces

Spalten:

  • id
  • hardware_snapshot_id
  • name
  • type
  • mac_address

Beziehungen:

  • hardware_snapshot_id referenziert hardware_snapshots.id

storage_devices

Spalten:

  • id
  • hardware_snapshot_id
  • name
  • model
  • serial
  • size_bytes
  • transport

Beziehungen:

  • hardware_snapshot_id referenziert hardware_snapshots.id

Beziehungskonsequenzen

Wird eine Organization gelöscht, dürfen zugehörige Devices nicht implizit mitgelöscht werden.

Wird ein Device gelöscht, werden zugehörige Hardware Snapshots mitgelöscht.

Wird ein Hardware Snapshot gelöscht, werden zugehörige Network Interfaces und Storage Devices automatisch mitgelöscht.

Für die relationale Umsetzung gilt daher:

  • devices.organization_id → ON DELETE RESTRICT
  • hardware_snapshots.device_id → ON DELETE CASCADE
  • network_interfaces.hardware_snapshot_id → ON DELETE CASCADE
  • storage_devices.hardware_snapshot_id → ON DELETE CASCADE

ID-Erzeugung

Persistente Plattformobjekte verwenden UUIDs als interne IDs.

UUIDs werden durch die Anwendung erzeugt.

Die Datenbank validiert und speichert die IDs, erzeugt sie jedoch nicht selbst.

Dadurch stehen Objekt-IDs bereits vor dem Datenbank-INSERT zur Verfügung und können innerhalb einer Transaktion für abhängige Datensätze verwendet werden.