CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; CREATE TYPE JobType AS ENUM ('shell', 'init', 'python'); 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 , 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 -- target triplet , platform TEXT NOT NULL , regtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , state AgentState NOT NULL DEFAULT 'new' -- is needed to processing requests , 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 BYTEA , payload_path 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) );