22 lines
935 B
SQL
22 lines
935 B
SQL
DROP TRIGGER IF EXISTS `provisioning_queue_guard`;--> statement-breakpoint
|
|
|
|
CREATE TRIGGER `provisioning_queue_guard`
|
|
BEFORE INSERT ON `provisioning_operations`
|
|
WHEN NEW.`status` = 'requested'
|
|
BEGIN
|
|
SELECT CASE WHEN NOT EXISTS (
|
|
SELECT 1
|
|
FROM `tenant_instances`
|
|
WHERE `id` = NEW.`tenant_id`
|
|
AND `desired_generation` + 1 = NEW.`target_generation`
|
|
AND `credential_revision` = NEW.`credential_revision`
|
|
AND `tombstoned_at` IS NULL
|
|
AND (
|
|
(NEW.`operation` = 'ensure' AND `lifecycle` IN ('requested', 'ready', 'failed', 'degraded'))
|
|
OR (NEW.`operation` = 'suspend' AND `lifecycle` IN ('ready', 'degraded'))
|
|
OR (NEW.`operation` = 'resume' AND `lifecycle` IN ('suspended', 'failed'))
|
|
OR (NEW.`operation` = 'deprovision' AND `lifecycle` IN ('requested', 'ready', 'suspended', 'failed', 'degraded'))
|
|
)
|
|
) THEN RAISE(ABORT, 'invalid_provisioning_transition') END;
|
|
END;
|