-- +goose Up -- +goose StatementBegin -- DHCP (Kea) — globale Singleton-Settings (node-lokal, wie dns_settings/ -- ntp_settings: ob DIESE Node DHCP betreibt). Subnets/Reservierungen sind -- geteilte Config und werden repliziert. CREATE TABLE IF NOT EXISTS dhcp_settings ( id INTEGER PRIMARY KEY DEFAULT 1, enabled BOOLEAN NOT NULL DEFAULT false, default_lease INTEGER NOT NULL DEFAULT 3600, max_lease INTEGER NOT NULL DEFAULT 7200, domain_name TEXT NOT NULL DEFAULT '', dns_servers TEXT NOT NULL DEFAULT '', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT dhcp_settings_singleton CHECK (id = 1) ); INSERT INTO dhcp_settings (id) VALUES (1) ON CONFLICT DO NOTHING; -- Subnets: an ein Interface per NAME gebunden (nicht per node-lokaler FK, -- damit die Replikation nicht an divergierenden interface_id bricht). CREATE TABLE IF NOT EXISTS dhcp_subnets ( id BIGSERIAL PRIMARY KEY, name TEXT NOT NULL, interface_name TEXT NOT NULL, subnet_cidr TEXT NOT NULL, pool_start TEXT NOT NULL DEFAULT '', pool_end TEXT NOT NULL DEFAULT '', gateway TEXT NOT NULL DEFAULT '', dns_servers TEXT NOT NULL DEFAULT '', lease_time INTEGER, active BOOLEAN NOT NULL DEFAULT true, description TEXT NOT NULL DEFAULT '', created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT dhcp_subnets_name_unique UNIQUE (name) ); CREATE TABLE IF NOT EXISTS dhcp_reservations ( id BIGSERIAL PRIMARY KEY, subnet_id BIGINT NOT NULL REFERENCES dhcp_subnets(id) ON DELETE CASCADE, name TEXT NOT NULL DEFAULT '', mac_address TEXT NOT NULL, ip_address TEXT NOT NULL, hostname TEXT NOT NULL DEFAULT '', active BOOLEAN NOT NULL DEFAULT true, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), CONSTRAINT dhcp_reservations_subnet_mac_unique UNIQUE (subnet_id, mac_address) ); CREATE INDEX IF NOT EXISTS idx_dhcp_reservations_subnet ON dhcp_reservations(subnet_id); -- +goose StatementEnd -- +goose Down -- +goose StatementBegin DROP TABLE IF EXISTS dhcp_reservations; DROP TABLE IF EXISTS dhcp_subnets; DROP TABLE IF EXISTS dhcp_settings; -- +goose StatementEnd