Initial commit: VMware vSphere API simulator scaffold.
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.
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
-- 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);
|
||||
Reference in New Issue
Block a user