Files
threshold/internal/db/schema/migrations/postgres/17/04_plugin_host.up.sql
T
ToddandJeff Mitchell bbfef2802f Placeholder Plugin Providers for Repos and added testPlugin struct (#1532)
* Create minimalistic plugin map and test plugin.

* Pass secrets and attributes to the plugin when creating catalogs or sets.  Add tests for CreateSet and CreateCatalog repo methods.

* make fmt and extract out getPrivateCatalog and getCatalog helper methods.

* Exporting TestPluginServer so it can be used in the handlers.

* Keep separate persisted data from host catalogs lookups which facilitate passing it onto the plugins.

* Add TODO to merge get Catalog and get Persisted data.

* Adding tests for unimplemented being returned by the plugin.

* Use GetFields() instead of AsMap() to confirm attributes should be populated. Make clone consistent between catalog and sets.

Co-authored-by: Jeff Mitchell <jeffrey.mitchell@gmail.com>
2021-09-21 09:18:49 -07:00

164 lines
7.3 KiB
PL/PgSQL

begin;
/*
┌──────────────────┐
│ plugin_host │
├──────────────────┤
│public_id (pk) │
│... │
└──────────────────┘
┼
┼
○
╱│╲
┌─────────────────────┐
│ host_plugin_catalog │
├─────────────────────┤ ┌───────────────────────────┐
┌────────────────┐ │public_id (pk) │ │host_plugin_catalog_secret │
│host_catalog │ │plugin_id (fk) │ ├───────────────────────────┤
├────────────────┤ │scope_id (fk) │ │host_catalog_id (pk, fk) │
│public_id │┼┼──○┼│name │┼┼──○┼│secret │
│scope_id │ │description │ │key_id (fk) │
└────────────────┘ │attributes │ └───────────────────────────┘
┼ └─────────────────────┘
┼ ┼
│ ┼
│ ○
○ ╱│╲
╱│╲ ┌────────────────────┐
┌────────────────┐ │ host_plugin_set │
│ host_set │ ├────────────────────┤
├────────────────┤ │public_id (pk) │
│public_id │ │host_catalog_id (fk)│
│host_catalog_id │┼┼──○┼│name │
└────────────────┘ │description │
│attributes │
└────────────────────┘
*/
create table host_plugin_catalog (
public_id wt_public_id primary key,
scope_id wt_scope_id not null
constraint iam_scope_fkey
references iam_scope (public_id)
on delete cascade
on update cascade,
plugin_id wt_plugin_id not null
constraint plugin_host_fkey
references plugin_host (public_id)
on delete cascade
on update cascade,
name wt_name,
description text,
create_time wt_timestamp,
update_time wt_timestamp,
version wt_version,
attributes bytea not null,
constraint host_catalog_fkey
foreign key (scope_id, public_id)
references host_catalog (scope_id, public_id)
on delete cascade
on update cascade,
constraint host_plugin_catalog_scope_id_name_uq
unique(scope_id, name)
);
create trigger update_version_column after update on host_plugin_catalog
for each row execute procedure update_version_column();
create trigger update_time_column before update on host_plugin_catalog
for each row execute procedure update_time_column();
create trigger default_create_time_column before insert on host_plugin_catalog
for each row execute procedure default_create_time();
create trigger immutable_columns before update on host_plugin_catalog
for each row execute procedure immutable_columns('public_id', 'scope_id', 'plugin_id', 'create_time');
create trigger insert_host_catalog_subtype before insert on host_plugin_catalog
for each row execute procedure insert_host_catalog_subtype();
create trigger update_host_catalog_subtype before update on host_plugin_catalog
for each row execute procedure update_host_catalog_subtype();
create trigger delete_host_catalog_subtype after delete on host_plugin_catalog
for each row execute procedure delete_host_catalog_subtype();
create table host_plugin_catalog_secret (
catalog_id wt_public_id primary key
constraint host_plugin_catalog_fkey
references host_plugin_catalog (public_id)
on delete cascade
on update cascade,
create_time wt_timestamp,
update_time wt_timestamp,
secret bytea not null -- encrypted value
constraint secret_must_not_be_empty
check(length(secret) > 0),
key_id wt_private_id not null
constraint kms_database_key_version_fkey
references kms_database_key_version (private_id)
on delete restrict
on update cascade
);
create trigger update_time_column before update on host_plugin_catalog_secret
for each row execute procedure update_time_column();
create trigger default_create_time_column before insert on host_plugin_catalog_secret
for each row execute procedure default_create_time();
create trigger immutable_columns before update on host_plugin_catalog_secret
for each row execute procedure immutable_columns('catalog_id', 'create_time');
create table host_plugin_set (
public_id wt_public_id primary key,
catalog_id wt_public_id not null
constraint host_plugin_catalog_fkey
references host_plugin_catalog (public_id)
on delete cascade
on update cascade,
name wt_name,
description text,
create_time wt_timestamp,
update_time wt_timestamp,
version wt_version,
attributes bytea not null,
constraint host_plugin_set_catalog_id_name_uq
unique(catalog_id, name),
constraint host_set_fkey
foreign key (catalog_id, public_id)
references host_set (catalog_id, public_id)
on delete cascade
on update cascade,
constraint host_plugin_set_catalog_id_public_id_uq
unique(catalog_id, public_id)
);
create trigger update_version_column after update on host_plugin_set
for each row execute procedure update_version_column();
create trigger update_time_column before update on host_plugin_set
for each row execute procedure update_time_column();
create trigger default_create_time_column before insert on host_plugin_set
for each row execute procedure default_create_time();
create trigger immutable_columns before update on host_plugin_set
for each row execute procedure immutable_columns('public_id', 'catalog_id','create_time');
create trigger insert_host_set_subtype before insert on host_plugin_set
for each row execute procedure insert_host_set_subtype();
create trigger delete_host_set_subtype after delete on host_plugin_set
for each row execute procedure delete_host_set_subtype();
insert into oplog_ticket (name, version)
values
('host_plugin_catalog', 1),
('host_plugin_catalog_secret', 1),
('host_plugin_set', 1);
commit;