# cloudbase/coriolis architecture

> Architecture diagram of the GitHub repository cloudbase/coriolis, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cloudbase/coriolis
- Repository: https://github.com/cloudbase/coriolis

## Overview

Coriolis is a cloud-workload migration service: users configure endpoints and submit transfers through an authenticated API, then follow task progress while workers export, convert, and import workloads. The README also documents scheduled transfers, deployments, endpoint/resource discovery, and migration of VM templates, storage, and network configuration. The graph reflects documented service roles and the sampled RPC, scheduling, worker, and OS-morphing behavior; unsampled implementation details are represented only at their supported package paths.

Main entry points: [`coriolis/api/v1/router.py`](https://github.com/cloudbase/coriolis/blob/main/coriolis/api/v1/router.py) (REST API), [`coriolis/conductor/rpc/server.py`](https://github.com/cloudbase/coriolis/blob/main/coriolis/conductor/rpc/server.py) (Conductor), [`coriolis/db/sqlalchemy/api.py`](https://github.com/cloudbase/coriolis/blob/main/coriolis/db/sqlalchemy/api.py) (SQL state), [`coriolis/worker/rpc/server.py`](https://github.com/cloudbase/coriolis/blob/main/coriolis/worker/rpc/server.py) (Worker service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and discovery"]
  node_api["REST API<br/>[router.py]"]
  node_auth["Auth middleware<br/>[auth.py]"]
  node_endpoints["Endpoints and resources<br/>[api.py]"]
  node_discovery["Regions and providers<br/>[api.py]"]
end

subgraph group_control["Transfer control"]
  node_conductor["Conductor<br/>[server.py]"]
  node_transfers["Transfer domain<br/>[api.py]"]
  node_tasks["Task workflows<br/>[migration_tasks.py]"]
  node_scheduler["Worker scheduler<br/>[server.py]"]
end

subgraph group_execution["Migration execution"]
  node_worker["Worker service<br/>[server.py]"]
  node_providers["Cloud providers<br/>[factory.py]"]
  node_transfer["Data transfer<br/>[data_transfer.py]"]
  node_osmorph["OS morphing<br/>[manager.py]"]
  node_osdetect["OS detection<br/>[manager.py]"]
end

subgraph group_state["Persistent state"]
  node_database[("SQL state<br/>[api.py]")]
end

subgraph group_operations["Operations"]
  node_schedules["Transfer schedules<br/>[api.py]"]
  node_cron["Schedule runner<br/>[server.py]"]
  node_deployments["Deployments<br/>[api.py]"]
  node_deployer["Deployer manager<br/>[server.py]"]
  node_minions["Minion pools<br/>[server.py]"]
end

node_user(("Migration client"))
node_keystone(("Keystone"))
node_barbican[("Barbican secrets")]
node_clouds["Source and target clouds"]

node_user -->|"submits requests"| node_api
node_api -->|"checks identity"| node_auth
node_auth -->|"validates token"| node_keystone
node_api -->|"manages endpoints"| node_endpoints
node_api -->|"queries discovery"| node_discovery
node_api -->|"manages transfers"| node_transfers
node_api -->|"manages schedules"| node_schedules
node_api -->|"manages deployments"| node_deployments
node_endpoints -->|"stores endpoint state"| node_database
node_transfers -->|"stores transfer state"| node_database
node_conductor -->|"reads and writes"| node_database
node_conductor -->|"selects workers"| node_scheduler
node_conductor -->|"starts task flows"| node_tasks
node_conductor -->|"dispatches tasks"| node_worker
node_worker -->|"uses provider"| node_providers
node_providers -.->|"gets credentials"| node_barbican
node_providers -->|"exports and imports"| node_clouds
node_worker -->|"moves workload data"| node_transfer
node_worker -->|"morphs guest OS"| node_osmorph
node_osmorph -->|"detects guest OS"| node_osdetect
node_scheduler -->|"finds worker services"| node_database
node_schedules -->|"registers jobs"| node_cron
node_cron -->|"triggers transfer"| node_conductor
node_deployments -->|"requests deployment"| node_deployer
node_deployer -->|"starts deployment"| node_conductor
node_minions -->|"tracks pool state"| node_database
node_minions -->|"coordinates actions"| node_conductor

click node_api "https://github.com/cloudbase/coriolis/blob/main/coriolis/api/v1/router.py"
click node_auth "https://github.com/cloudbase/coriolis/blob/main/coriolis/api/middleware/auth.py"
click node_endpoints "https://github.com/cloudbase/coriolis/blob/main/coriolis/endpoints/api.py"
click node_discovery "https://github.com/cloudbase/coriolis/blob/main/coriolis/regions/api.py"
click node_conductor "https://github.com/cloudbase/coriolis/blob/main/coriolis/conductor/rpc/server.py"
click node_transfers "https://github.com/cloudbase/coriolis/blob/main/coriolis/transfers/api.py"
click node_tasks "https://github.com/cloudbase/coriolis/blob/main/coriolis/tasks/migration_tasks.py"
click node_scheduler "https://github.com/cloudbase/coriolis/blob/main/coriolis/scheduler/rpc/server.py"
click node_worker "https://github.com/cloudbase/coriolis/blob/main/coriolis/worker/rpc/server.py"
click node_providers "https://github.com/cloudbase/coriolis/blob/main/coriolis/providers/factory.py"
click node_transfer "https://github.com/cloudbase/coriolis/blob/main/coriolis/data_transfer.py"
click node_osmorph "https://github.com/cloudbase/coriolis/blob/main/coriolis/osmorphing/manager.py"
click node_osdetect "https://github.com/cloudbase/coriolis/blob/main/coriolis/osmorphing/osdetect/manager.py"
click node_database "https://github.com/cloudbase/coriolis/blob/main/coriolis/db/sqlalchemy/api.py"
click node_schedules "https://github.com/cloudbase/coriolis/blob/main/coriolis/transfer_cron/api.py"
click node_cron "https://github.com/cloudbase/coriolis/blob/main/coriolis/transfer_cron/rpc/server.py"
click node_deployments "https://github.com/cloudbase/coriolis/blob/main/coriolis/deployments/api.py"
click node_deployer "https://github.com/cloudbase/coriolis/blob/main/coriolis/deployer_manager/rpc/server.py"
click node_minions "https://github.com/cloudbase/coriolis/blob/main/coriolis/minion_manager/rpc/server.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api,node_auth,node_endpoints,node_discovery,node_user toneBlue
class node_conductor,node_transfers,node_tasks,node_scheduler,node_barbican toneAmber
class node_worker,node_providers,node_transfer,node_osmorph,node_osdetect toneMint
class node_database toneRose
class node_schedules,node_cron,node_deployments,node_deployer,node_minions,node_keystone,node_clouds toneIndigo
```

## Components

### API and discovery

- [REST API](https://github.com/cloudbase/coriolis/blob/main/coriolis/api/v1/router.py): `coriolis/api/v1/router.py`
- [Auth middleware](https://github.com/cloudbase/coriolis/blob/main/coriolis/api/middleware/auth.py): `coriolis/api/middleware/auth.py`
- [Endpoints and resources](https://github.com/cloudbase/coriolis/blob/main/coriolis/endpoints/api.py): `coriolis/endpoints/api.py`
- [Regions and providers](https://github.com/cloudbase/coriolis/blob/main/coriolis/regions/api.py): `coriolis/regions/api.py`

### Transfer control

- [Conductor](https://github.com/cloudbase/coriolis/blob/main/coriolis/conductor/rpc/server.py): `coriolis/conductor/rpc/server.py`
- [Transfer domain](https://github.com/cloudbase/coriolis/blob/main/coriolis/transfers/api.py): `coriolis/transfers/api.py`
- [Task workflows](https://github.com/cloudbase/coriolis/blob/main/coriolis/tasks/migration_tasks.py): `coriolis/tasks/migration_tasks.py`
- [Worker scheduler](https://github.com/cloudbase/coriolis/blob/main/coriolis/scheduler/rpc/server.py): `coriolis/scheduler/rpc/server.py`

### Migration execution

- [Worker service](https://github.com/cloudbase/coriolis/blob/main/coriolis/worker/rpc/server.py): `coriolis/worker/rpc/server.py`
- [Cloud providers](https://github.com/cloudbase/coriolis/blob/main/coriolis/providers/factory.py): `coriolis/providers/factory.py`
- [Data transfer](https://github.com/cloudbase/coriolis/blob/main/coriolis/data_transfer.py): `coriolis/data_transfer.py`
- [OS morphing](https://github.com/cloudbase/coriolis/blob/main/coriolis/osmorphing/manager.py): `coriolis/osmorphing/manager.py`
- [OS detection](https://github.com/cloudbase/coriolis/blob/main/coriolis/osmorphing/osdetect/manager.py): `coriolis/osmorphing/osdetect/manager.py`

### Persistent state

- [SQL state](https://github.com/cloudbase/coriolis/blob/main/coriolis/db/sqlalchemy/api.py): `coriolis/db/sqlalchemy/api.py`

### Operations

- [Transfer schedules](https://github.com/cloudbase/coriolis/blob/main/coriolis/transfer_cron/api.py): `coriolis/transfer_cron/api.py`
- [Schedule runner](https://github.com/cloudbase/coriolis/blob/main/coriolis/transfer_cron/rpc/server.py): `coriolis/transfer_cron/rpc/server.py`
- [Deployments](https://github.com/cloudbase/coriolis/blob/main/coriolis/deployments/api.py): `coriolis/deployments/api.py`
- [Deployer manager](https://github.com/cloudbase/coriolis/blob/main/coriolis/deployer_manager/rpc/server.py): `coriolis/deployer_manager/rpc/server.py`
- [Minion pools](https://github.com/cloudbase/coriolis/blob/main/coriolis/minion_manager/rpc/server.py): `coriolis/minion_manager/rpc/server.py`

### Other components

- **Migration client**
- **Keystone**
- **Barbican secrets**
- **Source and target clouds**

## Connections

- Migration client → REST API: submits requests
- REST API → Auth middleware: checks identity
- Auth middleware → Keystone: validates token
- REST API → Endpoints and resources: manages endpoints
- REST API → Regions and providers: queries discovery
- REST API → Transfer domain: manages transfers
- REST API → Transfer schedules: manages schedules
- REST API → Deployments: manages deployments
- Endpoints and resources → SQL state: stores endpoint state
- Transfer domain → SQL state: stores transfer state
- Conductor → SQL state: reads and writes
- Conductor → Worker scheduler: selects workers
- Conductor → Task workflows: starts task flows
- Conductor → Worker service: dispatches tasks
- Worker service → Cloud providers: uses provider
- Cloud providers → Barbican secrets: gets credentials
- Cloud providers → Source and target clouds: exports and imports
- Worker service → Data transfer: moves workload data
- Worker service → OS morphing: morphs guest OS
- OS morphing → OS detection: detects guest OS
- Worker scheduler → SQL state: finds worker services
- Transfer schedules → Schedule runner: registers jobs
- Schedule runner → Conductor: triggers transfer
- Deployments → Deployer manager: requests deployment
- Deployer manager → Conductor: starts deployment
- Minion pools → SQL state: tracks pool state
- Minion pools → Conductor: coordinates actions
