f8d3cbdd59
Add the FastAPI app, PostgreSQL migrations, Docker/Helm packaging, API contracts, docs, client examples, and the unit/integration/compatibility test suite for local client and tooling labs without a real vCenter.
88 lines
2.7 KiB
SQL
88 lines
2.7 KiB
SQL
-- Tasks, snapshots, tagging, content library, datastore files, roles.
|
|
|
|
CREATE TABLE vsphere_tasks (
|
|
id text PRIMARY KEY,
|
|
description text NOT NULL DEFAULT '',
|
|
status text NOT NULL CHECK (status IN ('PENDING', 'RUNNING', 'SUCCEEDED', 'FAILED')),
|
|
service text NOT NULL DEFAULT '',
|
|
operation text NOT NULL DEFAULT '',
|
|
result jsonb,
|
|
error jsonb,
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
completed_at timestamptz
|
|
);
|
|
|
|
CREATE INDEX vsphere_tasks_status_idx ON vsphere_tasks (status);
|
|
|
|
CREATE TABLE vsphere_snapshots (
|
|
id text PRIMARY KEY,
|
|
vm_moid text NOT NULL REFERENCES vsphere_objects (moid) ON DELETE CASCADE,
|
|
name text NOT NULL,
|
|
description text NOT NULL DEFAULT '',
|
|
created_at timestamptz NOT NULL DEFAULT now(),
|
|
props jsonb NOT NULL DEFAULT '{}'::jsonb
|
|
);
|
|
|
|
CREATE INDEX vsphere_snapshots_vm_idx ON vsphere_snapshots (vm_moid);
|
|
|
|
CREATE TABLE vsphere_tag_categories (
|
|
id text PRIMARY KEY,
|
|
name text NOT NULL UNIQUE,
|
|
description text NOT NULL DEFAULT '',
|
|
cardinality text NOT NULL DEFAULT 'MULTIPLE',
|
|
associable_types text[] NOT NULL DEFAULT '{}'
|
|
);
|
|
|
|
CREATE TABLE vsphere_tags (
|
|
id text PRIMARY KEY,
|
|
category_id text NOT NULL REFERENCES vsphere_tag_categories (id) ON DELETE CASCADE,
|
|
name text NOT NULL,
|
|
description text NOT NULL DEFAULT '',
|
|
UNIQUE (category_id, name)
|
|
);
|
|
|
|
CREATE TABLE vsphere_tag_associations (
|
|
tag_id text NOT NULL REFERENCES vsphere_tags (id) ON DELETE CASCADE,
|
|
object_type text NOT NULL,
|
|
object_id text NOT NULL,
|
|
PRIMARY KEY (tag_id, object_type, object_id)
|
|
);
|
|
|
|
CREATE TABLE vsphere_libraries (
|
|
id text PRIMARY KEY,
|
|
name text NOT NULL UNIQUE,
|
|
description text NOT NULL DEFAULT '',
|
|
type text NOT NULL DEFAULT 'LOCAL',
|
|
props jsonb NOT NULL DEFAULT '{}'::jsonb
|
|
);
|
|
|
|
CREATE TABLE vsphere_library_items (
|
|
id text PRIMARY KEY,
|
|
library_id text NOT NULL REFERENCES vsphere_libraries (id) ON DELETE CASCADE,
|
|
name text NOT NULL,
|
|
type text NOT NULL DEFAULT 'ovf',
|
|
description text NOT NULL DEFAULT '',
|
|
props jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
UNIQUE (library_id, name)
|
|
);
|
|
|
|
CREATE TABLE vsphere_datastore_files (
|
|
id bigserial PRIMARY KEY,
|
|
datastore_moid text NOT NULL REFERENCES vsphere_objects (moid) ON DELETE CASCADE,
|
|
path text NOT NULL,
|
|
size bigint NOT NULL DEFAULT 0,
|
|
type text NOT NULL DEFAULT 'FILE',
|
|
UNIQUE (datastore_moid, path)
|
|
);
|
|
|
|
CREATE TABLE vsphere_permissions (
|
|
id bigserial PRIMARY KEY,
|
|
principal text NOT NULL,
|
|
role text NOT NULL,
|
|
entity_moid text,
|
|
propagate boolean NOT NULL DEFAULT true
|
|
);
|
|
|
|
CREATE INDEX vsphere_permissions_principal_idx ON vsphere_permissions (principal);
|