CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TYPE JobType AS ENUM ('shell', 'init', 'python', 'service'); CREATE TYPE JobState AS ENUM ('queued', 'running', 'finished'); CREATE TYPE AgentState AS ENUM ('new', 'active', 'banned'); CREATE TABLE IF NOT EXISTS agents ( alias TEXT, hostname TEXT NOT NULL, host_info TEXT NOT NULL, id UUID NOT NULL DEFAULT uuid_generate_v4(), ip_gray TEXT, ip_white TEXT, is_root BOOLEAN NOT NULL DEFAULT false, is_root_allowed BOOLEAN NOT NULL DEFAULT false, last_active TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, platform TEXT NOT NULL, regtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, state AgentState NOT NULL DEFAULT 'new', token TEXT, username TEXT NOT NULL, PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS jobs ( alias TEXT, argv TEXT NOT NULL, id UUID NOT NULL DEFAULT uuid_generate_v4(), exec_type JobType NOT NULL DEFAULT 'shell', platform TEXT NOT NULL, payload TEXT, schedule TEXT, PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS results ( agent_id UUID NOT NULL, alias TEXT, created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, id UUID NOT NULL DEFAULT uuid_generate_v4(), job_id UUID NOT NULL, result BYTEA, state JobState NOT NULL DEFAULT 'queued', exec_type JobType NOT NULL DEFAULT 'shell', retcode INTEGER, updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(agent_id) REFERENCES agents(id) ON DELETE CASCADE, FOREIGN KEY(job_id) REFERENCES jobs(id) ON DELETE CASCADE, PRIMARY KEY(id) ); CREATE TABLE IF NOT EXISTS certificates ( agent_id UUID NOT NULL, id UUID NOT NULL DEFAULT uuid_generate_v4(), is_revoked BOOLEAN NOT NULL DEFAULT FALSE, PRIMARY KEY(id), FOREIGN KEY(agent_id) REFERENCES agents(id) );