247 lines
4.3 KiB
Markdown
247 lines
4.3 KiB
Markdown
# 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.
|