Migration 0052: Bestandsmigration, jeder Workspace genau eine Distro
Liebherrs gepflegter Schulcomputer wird Vorlage je Distro (Kundengruppe Schule), Liebherr- und Gaissach-Profile zeigen auf die Mint-Variante. Alter globaler Schulcomputer wird Schulcomputer Basis je Distro fuer die Bestandsprofile. Gast/fjmfm geloescht, Entwickler bleibt als Entwickler (Mint) bis nach dem 01.11.2026 (gueltiger Aktivierungszugang). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
08ecec3c80
commit
b361579cc6
1 file changed
+134
@@ -0,0 +1,134 @@
|
||||
BEGIN;
|
||||
|
||||
-- Bestandsmigration zu Schritt C (Nutzer-Entscheidungen 07.10.2026, siehe
|
||||
-- platform-docs/roadmap/workspace-creator-neu.md und ADR-0038):
|
||||
-- jeder Workspace bekommt genau eine Distro.
|
||||
--
|
||||
-- 1. Liebherrs gepflegter Stand "Schulcomputer (eigene Kopie)" wird Inhalt
|
||||
-- der neuen Vorlagen "Schulcomputer (Mint/Debian/Ubuntu)" (Kundengruppe
|
||||
-- Schule). Liebherrs Profile und das Profil von MS Gaißach zeigen auf die
|
||||
-- Mint-Variante; die Kopie selbst entfällt.
|
||||
-- 2. Der bisherige globale "Schulcomputer" (3 Merkmale) wird zu
|
||||
-- "Schulcomputer Basis" je Distro, ohne Vorlagen-Kennzeichen - nur noch für
|
||||
-- die Bestandsprofile (Default Lab, WLAN-Test), deren Soll-Zustand gleich
|
||||
-- bleibt.
|
||||
-- 3. "Gast" und "fjmfm" (Liebherr, unbenutzt) werden gelöscht.
|
||||
-- 4. "Entwickler" bleibt bis nach dem 01.11.2026 als "Entwickler (Mint)"
|
||||
-- stehen (gültiger Aktivierungszugang am Profil
|
||||
-- "Tuxflotte-Mint-Entwicklung-v0.1"), danach samt Profilen löschen.
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
b_mint UUID := (SELECT id FROM backends WHERE key = 'mint-image');
|
||||
b_debian UUID := (SELECT id FROM backends WHERE key = 'debian-image');
|
||||
b_ubuntu UUID := (SELECT id FROM backends WHERE key = 'ubuntu-image');
|
||||
kg_schule UUID := (SELECT id FROM kundengruppen WHERE key = 'schule');
|
||||
alt_basis UUID := '44444444-4444-4444-8444-444444444444';
|
||||
liebherr_kopie UUID := '842459c3-572a-4389-8ffc-8b598b623bf1';
|
||||
liebherr_kopie_v UUID;
|
||||
alt_basis_v UUID;
|
||||
ziel RECORD;
|
||||
neu_ws UUID;
|
||||
neu_v UUID;
|
||||
schulcomputer_mint UUID;
|
||||
BEGIN
|
||||
IF b_mint IS NULL OR b_debian IS NULL OR b_ubuntu IS NULL OR kg_schule IS NULL THEN
|
||||
RAISE EXCEPTION 'Distros oder Kundengruppe fehlen';
|
||||
END IF;
|
||||
|
||||
SELECT id INTO liebherr_kopie_v FROM workspace_versionen
|
||||
WHERE workspace_id = liebherr_kopie AND status = 'veroeffentlicht' ORDER BY nummer DESC LIMIT 1;
|
||||
SELECT id INTO alt_basis_v FROM workspace_versionen
|
||||
WHERE workspace_id = alt_basis AND status = 'veroeffentlicht' ORDER BY nummer DESC LIMIT 1;
|
||||
IF liebherr_kopie_v IS NULL OR alt_basis_v IS NULL THEN
|
||||
RAISE EXCEPTION 'Quell-Workspaces nicht gefunden';
|
||||
END IF;
|
||||
|
||||
-- 1. Neue Vorlagen je Distro aus Liebherrs Stand
|
||||
FOR ziel IN SELECT * FROM (VALUES
|
||||
('schulcomputer-mint', 'Schulcomputer (Mint)', b_mint),
|
||||
('schulcomputer-debian', 'Schulcomputer (Debian)', b_debian),
|
||||
('schulcomputer-ubuntu', 'Schulcomputer (Ubuntu)', b_ubuntu)
|
||||
) AS t(key, name, backend_id)
|
||||
LOOP
|
||||
neu_ws := gen_random_uuid();
|
||||
neu_v := gen_random_uuid();
|
||||
INSERT INTO workspaces (id, organization_id, key, name, description, backend_id, ist_vorlage, sichtbarkeit)
|
||||
SELECT neu_ws, NULL, ziel.key, ziel.name, w.description, ziel.backend_id, TRUE, 'kundengruppe'
|
||||
FROM workspaces w WHERE w.id = liebherr_kopie;
|
||||
INSERT INTO workspace_freigabe_kundengruppen (workspace_id, kundengruppe_id) VALUES (neu_ws, kg_schule);
|
||||
INSERT INTO workspace_versionen (id, workspace_id, nummer, status, notiz, veroeffentlicht_am)
|
||||
VALUES (neu_v, neu_ws, 1, 'veroeffentlicht',
|
||||
'Übernommen aus Liebherr „Schulcomputer (eigene Kopie)“ (Migration 0052)', now());
|
||||
INSERT INTO workspace_version_merkmale (workspace_version_id, merkmal_id)
|
||||
SELECT neu_v, merkmal_id FROM workspace_version_merkmale WHERE workspace_version_id = liebherr_kopie_v;
|
||||
-- Webapps kopieren, Icon-Datei wird geteilt (siehe delete_webapp()).
|
||||
INSERT INTO workspace_webapps (id, workspace_id, workspace_version_id, name, url, icon_filename,
|
||||
icon_content_type, sort_order, template_id, kategorie_id, kiosk_modus)
|
||||
SELECT gen_random_uuid(), neu_ws, neu_v, name, url, icon_filename, icon_content_type, sort_order,
|
||||
template_id, kategorie_id, kiosk_modus
|
||||
FROM workspace_webapps WHERE workspace_version_id = liebherr_kopie_v;
|
||||
IF ziel.backend_id = b_mint THEN
|
||||
schulcomputer_mint := neu_ws;
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
-- Liebherr-Profile und MS Gaißach auf die neue Mint-Vorlage
|
||||
UPDATE bereitstellungsvorlagen SET workspace_id = schulcomputer_mint, updated_at = now()
|
||||
WHERE workspace_id = liebherr_kopie;
|
||||
UPDATE bereitstellungsvorlagen SET workspace_id = schulcomputer_mint, updated_at = now()
|
||||
WHERE organization_id = (SELECT id FROM organizations WHERE name = 'MS Gaißach')
|
||||
AND workspace_id = alt_basis;
|
||||
|
||||
DELETE FROM workspaces WHERE id = liebherr_kopie;
|
||||
|
||||
-- 2. Alter globaler Schulcomputer -> "Schulcomputer Basis" je Distro
|
||||
UPDATE workspaces
|
||||
SET name = 'Schulcomputer Basis (Mint)', key = 'schulcomputer-basis-mint', backend_id = b_mint,
|
||||
ist_vorlage = FALSE, updated_at = now()
|
||||
WHERE id = alt_basis;
|
||||
|
||||
FOR ziel IN SELECT * FROM (VALUES
|
||||
('schulcomputer-basis-debian', 'Schulcomputer Basis (Debian)', b_debian),
|
||||
('schulcomputer-basis-ubuntu', 'Schulcomputer Basis (Ubuntu)', b_ubuntu)
|
||||
) AS t(key, name, backend_id)
|
||||
LOOP
|
||||
neu_ws := gen_random_uuid();
|
||||
neu_v := gen_random_uuid();
|
||||
INSERT INTO workspaces (id, organization_id, key, name, description, backend_id, ist_vorlage, sichtbarkeit)
|
||||
SELECT neu_ws, NULL, ziel.key, ziel.name, w.description, ziel.backend_id, FALSE, 'global'
|
||||
FROM workspaces w WHERE w.id = alt_basis;
|
||||
INSERT INTO workspace_versionen (id, workspace_id, nummer, status, notiz, veroeffentlicht_am)
|
||||
VALUES (neu_v, neu_ws, 1, 'veroeffentlicht', 'Aufgeteilt aus „Schulcomputer“ (Migration 0052)', now());
|
||||
INSERT INTO workspace_version_merkmale (workspace_version_id, merkmal_id)
|
||||
SELECT neu_v, merkmal_id FROM workspace_version_merkmale WHERE workspace_version_id = alt_basis_v;
|
||||
INSERT INTO workspace_webapps (id, workspace_id, workspace_version_id, name, url, icon_filename,
|
||||
icon_content_type, sort_order, template_id, kategorie_id, kiosk_modus)
|
||||
SELECT gen_random_uuid(), neu_ws, neu_v, name, url, icon_filename, icon_content_type, sort_order,
|
||||
template_id, kategorie_id, kiosk_modus
|
||||
FROM workspace_webapps WHERE workspace_version_id = alt_basis_v;
|
||||
UPDATE bereitstellungsvorlagen SET workspace_id = neu_ws, updated_at = now()
|
||||
WHERE workspace_id = alt_basis AND backend_id = ziel.backend_id;
|
||||
END LOOP;
|
||||
|
||||
-- 3. Unbenutzte Liebherr-Reste
|
||||
DELETE FROM workspaces WHERE id IN ('5ac88c5f-2917-4956-a9a4-65b516631a40', 'c13c1991-b00b-45ce-8337-449050110065');
|
||||
|
||||
-- 4. Entwickler bis zum Löschen nach dem 01.11.2026
|
||||
UPDATE workspaces
|
||||
SET name = 'Entwickler (Mint)', backend_id = b_mint, ist_vorlage = FALSE, updated_at = now()
|
||||
WHERE id = '55555555-5555-4555-8555-555555555555';
|
||||
|
||||
-- Kontrolle: jedes Profil zeigt auf einen Workspace seiner Distro
|
||||
-- (Ausnahme: die abgelaufenen Debian-/Ubuntu-Entwicklungs-Profile bis zur
|
||||
-- Löschung von "Entwickler").
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM bereitstellungsvorlagen bv JOIN workspaces w ON w.id = bv.workspace_id
|
||||
WHERE w.backend_id IS DISTINCT FROM bv.backend_id
|
||||
AND w.id <> '55555555-5555-4555-8555-555555555555'
|
||||
) THEN
|
||||
RAISE EXCEPTION 'Profil zeigt auf Workspace einer anderen Distro';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
Reference in new issue
Block a user