Replaces the config.json-backed flat profile model with the
Postgres-backed Workspace/Merkmal/Backend/Blueprint/Bereitstellungsvorlage
schema (migrations 0003-0005). /api/v1/activate now returns Bereitstellungsvorlage
templates instead of profiles, and a new POST /api/v1/templates/{id}/resolve
endpoint resolves a chosen template to a full Runtime Blueprint (workspace,
backend, resolved Merkmal->Ansible-role blueprints, and installation
directives), recording the resulting device assignment.
Removes the now-unused config.json and file-based device registry
directory in favor of the PostgreSQL-backed activation codes and
device tables.
97 lines
2.6 KiB
PL/PgSQL
97 lines
2.6 KiB
PL/PgSQL
BEGIN;
|
|
|
|
CREATE TABLE workspaces (
|
|
id UUID PRIMARY KEY,
|
|
organization_id UUID
|
|
REFERENCES organizations(id)
|
|
ON DELETE CASCADE,
|
|
key TEXT NOT NULL,
|
|
name TEXT NOT NULL,
|
|
description TEXT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE (organization_id, key)
|
|
);
|
|
|
|
CREATE TABLE merkmale (
|
|
id UUID PRIMARY KEY,
|
|
key TEXT NOT NULL UNIQUE,
|
|
name TEXT NOT NULL,
|
|
description TEXT
|
|
);
|
|
|
|
CREATE TABLE workspace_merkmale (
|
|
workspace_id UUID NOT NULL
|
|
REFERENCES workspaces(id)
|
|
ON DELETE CASCADE,
|
|
merkmal_id UUID NOT NULL
|
|
REFERENCES merkmale(id)
|
|
ON DELETE RESTRICT,
|
|
PRIMARY KEY (workspace_id, merkmal_id)
|
|
);
|
|
|
|
CREATE TABLE backends (
|
|
id UUID PRIMARY KEY,
|
|
key TEXT NOT NULL UNIQUE,
|
|
name TEXT NOT NULL,
|
|
installer_type TEXT NOT NULL
|
|
);
|
|
|
|
CREATE TABLE blueprints (
|
|
id UUID PRIMARY KEY,
|
|
merkmal_id UUID NOT NULL
|
|
REFERENCES merkmale(id)
|
|
ON DELETE CASCADE,
|
|
backend_id UUID NOT NULL
|
|
REFERENCES backends(id)
|
|
ON DELETE CASCADE,
|
|
ansible_role TEXT NOT NULL,
|
|
UNIQUE (merkmal_id, backend_id)
|
|
);
|
|
|
|
CREATE TABLE bereitstellungsvorlagen (
|
|
id UUID PRIMARY KEY,
|
|
organization_id UUID NOT NULL
|
|
REFERENCES organizations(id)
|
|
ON DELETE CASCADE,
|
|
workspace_id UUID NOT NULL
|
|
REFERENCES workspaces(id)
|
|
ON DELETE RESTRICT,
|
|
backend_id UUID NOT NULL
|
|
REFERENCES backends(id)
|
|
ON DELETE RESTRICT,
|
|
label TEXT NOT NULL,
|
|
is_default BOOLEAN NOT NULL DEFAULT FALSE,
|
|
disk_encryption BOOLEAN NOT NULL DEFAULT FALSE,
|
|
partitioning TEXT NOT NULL DEFAULT 'default',
|
|
secure_boot_required BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE UNIQUE INDEX bereitstellungsvorlagen_one_default_per_org
|
|
ON bereitstellungsvorlagen (organization_id)
|
|
WHERE is_default;
|
|
|
|
CREATE TABLE assignments (
|
|
id UUID PRIMARY KEY,
|
|
device_id UUID NOT NULL UNIQUE
|
|
REFERENCES devices(id)
|
|
ON DELETE CASCADE,
|
|
bereitstellungsvorlage_id UUID NOT NULL
|
|
REFERENCES bereitstellungsvorlagen(id)
|
|
ON DELETE RESTRICT,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE TABLE activation_codes (
|
|
code TEXT PRIMARY KEY,
|
|
organization_id UUID NOT NULL
|
|
REFERENCES organizations(id)
|
|
ON DELETE CASCADE,
|
|
active BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
COMMIT;
|