... | ... | @@ -111,7 +111,59 @@ Besides saving the new configuration revision, the CM also creates a reverse `su |
|
|
![CMRemoteSubnet4Set.svg](uploads/5a5059d30158b698e4b83475ff5f1ac4/CMRemoteSubnet4Set.svg)
|
|
|
|
|
|
## Configuration Versioning
|
|
|
TBD
|
|
|
|
|
|
```sql
|
|
|
ALTER TABLE kea_daemon ADD COLUMN user_id BIGINT;
|
|
|
ALTER TABLE kea_daemon ADD CONSTRAINT
|
|
|
kea_daemon_user_id_fkey FOREIGN KEY (user_id)
|
|
|
REFERENCES system_user(id)
|
|
|
ON UPDATE CASCADE
|
|
|
ON DELETE CASCADE;
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS kea_config_revision (
|
|
|
id BIGSERIAL NOT NULL PRIMARY KEY,
|
|
|
config JSONB,
|
|
|
reverse_commands JSONB[],
|
|
|
user_id BIGINT,
|
|
|
created_at TIME WITHOUT TIME ZONE DEFAULT timezone('utc'::text, now()) NOT NULL,
|
|
|
kea_daemon_id BIGINT NOT NULL,
|
|
|
CONSTRAINT kea_config_revision_daemon FOREIGN KEY (kea_daemon_id)
|
|
|
REFERENCES kea_daemon(id)
|
|
|
ON UPDATE CASCADE
|
|
|
ON DELETE CASCADE,
|
|
|
CHECK(
|
|
|
((config IS NOT NULL) OR ((reverse_commands IS NOT NULL) AND (array_length(reverse_commands, 1) > 0)))
|
|
|
)
|
|
|
);
|
|
|
|
|
|
CREATE INDEX kea_config_revision_daemon_idx ON kea_config_revision USING btree (kea_daemon_id);
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION create_kea_config_revision()
|
|
|
RETURNS trigger
|
|
|
LANGUAGE 'plpgsql'
|
|
|
AS $function$
|
|
|
BEGIN
|
|
|
IF NEW.config_hash != OLD.config_hash THEN
|
|
|
INSERT INTO kea_config_revision (config, user_id, kea_daemon_id)
|
|
|
VALUES (OLD.config, OLD.user_id, NEW.id);
|
|
|
END IF;
|
|
|
RETURN NEW;
|
|
|
END;
|
|
|
$function$;
|
|
|
|
|
|
CREATE TRIGGER trigger_create_kea_config_revision
|
|
|
AFTER UPDATE ON kea_daemon
|
|
|
FOR EACH ROW EXECUTE FUNCTION create_kea_config_revision();
|
|
|
```
|
|
|
|
|
|
Reverse migration:
|
|
|
|
|
|
```
|
|
|
DROP TRIGGER IF EXISTS trigger_create_kea_config_revision ON kea_daemon;
|
|
|
DROP FUNCTION IF EXISTS create_kea_config_revision;
|
|
|
DROP TABLE IF EXISTS kea_config_revision;
|
|
|
ALTER TABLE kea_daemon DROP COLUMN user_id;
|
|
|
```
|
|
|
|
|
|
## Delayed Re-configuration
|
|
|
TBD
|
... | ... | |