Phase 4a: deployment-provisioning choreography saga
Wire a full tenant deployment as one orchestrated, compensating saga: mark → create droplet → wait active → register in inventory → link to deployment → point DNS → activate. A failure anywhere rolls the whole thing back — droplet destroyed, DNS reverted, deployment moved to cancelled. - New lifecycle state `provisioning`; deployments created via the provision path enter here and only reach `active` once the saga's ActivateDeployment step runs. - Four new steps: MarkDeploymentProvisioning (owns the deployment's failure state), LinkDeploymentResource, PointDeploymentDns, ActivateDeployment. - Provisioning.provision_deployment/2 assembles + starts the saga. - DeploymentController: POST /deployments with provision:true creates in `provisioning` and kicks the saga (202); GET /deployments/:id now returns the provisioning saga + per-step progress. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -24,6 +24,7 @@ defmodule ArcadiaCloud.Deployments do
|
||||
|
||||
# from_state => [allowed to_states]
|
||||
@transitions %{
|
||||
"provisioning" => ~w(active cancelled),
|
||||
"trial" => ~w(active cancelled),
|
||||
"active" => ~w(paused past_due cancelled),
|
||||
"paused" => ~w(active cancelled),
|
||||
|
||||
Reference in New Issue
Block a user