Saga templates

Define and reconcile VM, container, Compose, and infrastructure state

Saga is Tasmanian Cloud's template and execution system for applications that are larger than one resource.

Saga template state and execution flowTasmanian Cloud saga template state and execution flow.[SAGA]VM + CONTAINERdesired stateCOMPOSEapplication stateANSIBLE + TOFUprovider workKeep the boundary explicit. Let each system do the work it is good at.

A Saga definition can describe:

  • Virtual machine state and machine configuration.
  • Container images, networks, volumes, and environment bindings.
  • Docker Compose services and their relationships.
  • Ansible tasks for host and application configuration.
  • Terraform or OpenTofu resources for infrastructure state.
  • Secret references, event hooks, and the outputs that other steps need.

Desired state becomes a run

flowchart LR
    DEF[System definition]
    RESOLVE[Resolve inputs]
    PLAN[Build plan]
    EXEC[Run VM, Compose, Ansible, and IaC steps]
    VERIFY[Verify provider state]
    OUT[Outputs and events]

    DEF --> RESOLVE --> PLAN --> EXEC --> VERIFY --> OUT

The runtime keeps the stages separate. An accepted request is not the same as a running resource. A plan is not the same as a provider result. This distinction makes failure, retry, and compensation visible.

A small example

name: customer-api

vm:
  image: debian-13
  size: standard-2vcpu-4gb
  network: private

compose:
  services:
    api:
      image: registry.example/api:latest
      ports: ["8080"]
    worker:
      image: registry.example/worker:latest

ansible:
  playbook: site.yml

opentofu:
  directory: infra/

The example is deliberately small. A real definition can add storage, DNS, policies, Kleis references, webhooks, and notification routes without changing the deployment interface.

Run it from anywhere

The same Saga can be started through the REST API. Use the portal, tc CLI, or an SDK as the client that submits the request. Use the portal to inspect the plan, the CLI in a release script, or an SDK when another system owns the lifecycle.

Related