Introduce three migrations: admin permissions (is_admin + permissions table), BYOC team tracking, and multi-host support (hosts, host_tokens, host_tags). Add Redis to dev infra and wire up client in control plane for ephemeral host registration tokens. Add go-redis dependency.
48 lines
1.6 KiB
SQL
48 lines
1.6 KiB
SQL
-- +goose Up
|
|
|
|
CREATE TABLE hosts (
|
|
id TEXT PRIMARY KEY,
|
|
type TEXT NOT NULL DEFAULT 'regular', -- 'regular' or 'byoc'
|
|
team_id TEXT REFERENCES teams(id) ON DELETE SET NULL,
|
|
provider TEXT,
|
|
availability_zone TEXT,
|
|
arch TEXT,
|
|
cpu_cores INTEGER,
|
|
memory_mb INTEGER,
|
|
disk_gb INTEGER,
|
|
address TEXT, -- ip:port of host agent
|
|
status TEXT NOT NULL DEFAULT 'pending', -- 'pending', 'online', 'offline', 'draining'
|
|
last_heartbeat_at TIMESTAMPTZ,
|
|
metadata JSONB NOT NULL DEFAULT '{}',
|
|
created_by TEXT NOT NULL REFERENCES users(id),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE TABLE host_tokens (
|
|
id TEXT PRIMARY KEY,
|
|
host_id TEXT NOT NULL REFERENCES hosts(id) ON DELETE CASCADE,
|
|
created_by TEXT NOT NULL REFERENCES users(id),
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
expires_at TIMESTAMPTZ NOT NULL,
|
|
used_at TIMESTAMPTZ
|
|
);
|
|
|
|
CREATE TABLE host_tags (
|
|
host_id TEXT NOT NULL REFERENCES hosts(id) ON DELETE CASCADE,
|
|
tag TEXT NOT NULL,
|
|
PRIMARY KEY (host_id, tag)
|
|
);
|
|
|
|
CREATE INDEX idx_hosts_type ON hosts(type);
|
|
CREATE INDEX idx_hosts_team ON hosts(team_id);
|
|
CREATE INDEX idx_hosts_status ON hosts(status);
|
|
CREATE INDEX idx_host_tokens_host ON host_tokens(host_id);
|
|
CREATE INDEX idx_host_tags_tag ON host_tags(tag);
|
|
|
|
-- +goose Down
|
|
|
|
DROP TABLE host_tags;
|
|
DROP TABLE host_tokens;
|
|
DROP TABLE hosts;
|