Quelltext des aktuellen Standes
-- Virtualisierung: Snapshots je VM und die einzelnen Speicherorte je Host.
--
-- Die Gesamtkapazitaet steht schon an vm_hosts.storage_gb - erst die einzelnen
-- Datastores zeigen, welcher davon vollaeuft. Snapshots waren bisher gar nicht
-- sichtbar, obwohl ein vergessener alter Snapshot Speicher frisst und die
-- Wiederherstellung erschwert.
--
-- Beide Tabellen spiegeln den Stand des Hypervisors: Was er nicht mehr meldet,
-- raeumt der Abgleich hier wieder ab. Anders als bei einer VM gibt es dafuer
-- nichts zu entscheiden - ein geloeschter Snapshot ist geloescht.
CREATE TABLE IF NOT EXISTS `vm_snapshots` (
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`vm_id` INT UNSIGNED NOT NULL,
`external_id` VARCHAR(255) NOT NULL COMMENT 'Kennung des Snapshots beim Hypervisor',
`name` VARCHAR(255) NOT NULL,
`description` TEXT NULL,
`created_at_hv` DATETIME NULL COMMENT 'Zeitpunkt der Aufnahme laut Hypervisor',
`size_gb` DECIMAL(12,2) NULL,
`is_current` TINYINT(1) NOT NULL DEFAULT 0 COMMENT 'Aktueller Stand der VM haengt an diesem Snapshot',
`last_seen_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `uniq_vmsnap_vm_ext` (`vm_id`, `external_id`),
KEY `idx_vmsnap_created` (`created_at_hv`),
CONSTRAINT `fk_vmsnap_vm` FOREIGN KEY (`vm_id`) REFERENCES `vm_vms`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `vm_datastores` (
`id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`host_id` INT UNSIGNED NOT NULL,
`external_id` VARCHAR(255) NOT NULL COMMENT 'Kennung des Speicherorts beim Hypervisor',
`name` VARCHAR(255) NOT NULL,
`type` VARCHAR(60) NULL COMMENT 'z. B. nfs, lvm-thin, VMFS',
`capacity_gb` DECIMAL(14,2) NULL,
`free_gb` DECIMAL(14,2) NULL,
`last_seen_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY `uniq_vmds_host_ext` (`host_id`, `external_id`),
CONSTRAINT `fk_vmds_host` FOREIGN KEY (`host_id`) REFERENCES `vm_hosts`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Ab wie vielen Tagen ein Snapshot als alt gilt. Betreiberseitig anpassbar
-- unter /admin/vms/hypervisor.
INSERT IGNORE INTO `system_settings` (`key`, `value`)
VALUES ('vm_snapshot_warn_days', '30');