* 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>
164 lines
7.3 KiB
PL/PgSQL
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;
|