CloudStack as a destination cloud

**Coriolis **provides agentless integration with supported virtualization platforms by running the platform plugin directly on the Coriolis Appliance. This architecture eliminates the need to deploy agents on source or destination platforms and simplifies connectivity and setup.

This document presents how to use Coriolis to replicate or migrate VMs into Apache CloudStack. Migrations (CMaaS) and Replicas (DRaaS) follow the same destination requirements and transfer flow described below.

Scope and limitations

Topic

Notes

Direction

Import into CloudStack only

Hypervisor

KVM zones; CloudStack 4.21 or newer recommended

Offerings

Disk, minion, and migrated VM offerings must each be pre-created and chosen explicitly in Coriolis settings

Minion offering

One minion compute offering is used for data replication and for OS morphing (Linux and Windows)

Disk offering

Must be a custom (flexible-size) offering; fixed-size disk offerings are not supported

OS morphing

Supported for common Linux distributions and Windows; validate in your environment before production use

Transfer executions

Steps performed by Coriolis during each transfer execution to CloudStack:

  1. On the first execution for a VM, create empty replica volumes on CloudStack primary storage — one per source disk, sized to match the source. On later executions, reuse the existing replicated volumes when size and storage mapping still match.

  2. On the first execution, create a live snapshot of the source VM disks (handled by the source platform). On later executions, create a new incremental snapshot based on the last successful replica execution.

  3. Deploy a temporary Linux minion VM in the target zone, allocate a public IP with static NAT, and open firewall rules so that Coriolis can reach the minion.

  4. Attach the replicated volumes to the Linux minion and sync disk data from the source snapshot through the minion into the CloudStack volumes.

  5. When all disks are synced, detach the volumes from the minion, delete the temporary minion VM, and release its public IP and firewall rules. Replicated volumes remain on primary storage for the next execution or deployment.

Deployments

Steps performed by Coriolis when deploying a replica or completing a migration to CloudStack:

  1. Snapshot the replicated volumes on CloudStack so changes can be rolled back in case of deployment failures. By default, new volumes are created from these snapshots for deployment, leaving the original replicated volumes intact for future replica executions.

  2. If OS morphing is enabled, deploy a temporary minion VM matching the guest OS (Linux template for Linux guests, Windows template for Windows guests), attach the deployment volumes, and run OS morphing to adapt the guest for CloudStack/KVM (drivers, networking, cloud-init or cloudbase-init, and related packages).

  3. Detach the volumes from the morphing minion and delete the temporary minion VM.

  4. Deploy the final migrated VM: create a shell VM from the Linux template , replace its boot volume with the migrated root disk, attach remaining data disks, map guest networks from the transfer network map, and port VM configuration from the source VM (CPU, RAM, firmware, secure boot, etc.).

  5. Start the migrated VM on CloudStack (unless configured to skip starting migrated instances).

CloudStack prerequisites

Item

Requirement

API access

Coriolis can reach the CloudStack API over HTTPS

API permissions

Volumes, VMs, templates, offerings, networks, public IPs, firewall, static NAT, snapshots

Zone

Selected per Transfer; determines templates, offerings, networks, and storage

Offerings

Custom disk offering plus compute offerings for minion and migrated VM — see Disk and compute offerings

Templates

Linux: zone cloud-init template (defaults work); Windows: custom WS2022+ template for morphing — see Recommended Minions

Primary storage

KVM storage pools mapped in Coriolis storage mappings

Public IPs

Account can allocate public IPs for temporary workers in the target zone

Required CloudStack Permissions

Coriolis requires a CloudStack user with the native Admin - Read-Only role, supplemented with the following additional permissions.

These permissions allow Coriolis to perform the operations required for virtual machine migration, including managing compute resources, storage volumes and snapshots, and network connectivity.

Virtual Machine

Storage

Network

deployVirtualMachine startVirtualMachine stopVirtualMachine updateVirtualMachine destroyVirtualMachine expungeVirtualMachine addNicToVirtualMachine

listGuestOsMapping

createVolume

deleteVolume resizeVolume attachVolume detachVolume createSnapshot deleteSnapshot

listStoragePools

associateIpAddress

disassociateIpAddress enableStaticNat disableStaticNat createFirewallRule deleteFirewallRule

Note: The Admin - Read-Only role provides the baseline read-only access. The permissions listed above must be granted in addition to that role to enable Coriolis migration operations.

Endpoint connection

Coriolis connection to CloudStack requires a user account that has generated API keys and secrets. For more details, access this CloudStack documentation page: Using API Key and Secret Key based Authentication

Create a CloudStack destination endpoint in Coriolis with:

Field

Value

API Endpoint

CloudStack API URL (for example https://cloudstack.example.com/client/api)

API Key

API key for the migration account

API Secret

Matching API secret

Networking and connectivity

  • Temporary minions use a public IP with static NAT. Plan guest networks and IP capacity accordingly.

  • Map each source VM network to a CloudStack guest network in the transfer network map.

  • Coriolis must reach each temporary minion public IP on the ports below.

Port

When needed

TCP 22

All migrations (Linux temporary minion)

TCP 4433, 5566

Disk replication (default data path uses 5566)

TCP 5986

Windows OS morphing only

Disk and compute offerings

Create three offerings in CloudStack, then map them to the Coriolis destination target environment (UI or API). Coriolis does not choose an offering for you when several exist in a zone.

The three offerings

Coriolis setting

Create in CloudStack

Purpose

Disk offering

Custom (flexible-size) disk offering

Replica volumes during data replication

Minion service offering

Compute offering

Temporary workers (replication and OS morphing)

Migrated VM service offering

Compute offering

Final migrated VM after cutover

See Recommended minions for template choices, suggested offering names, and deploy sizing.

Target environment options

Destination target environment fields for CloudStack (UI or API):

Option

Required

Notes

Zone

Yes

Target CloudStack zone

Linux template

Yes

Zone cloud-init template; default CloudStack templates work out of the box

Windows template

Windows morphing

WS2019+ with Cloudbase-init configuration; not used for data replication

Disk offering

Yes

Custom flexible disk offering

Minion service offering

Yes

Temporary minions

Migrated VM service offering

For deployments

Final VM

Storage mappings

Yes

Each source disk → primary storage pool

Network map

Yes

Each source network → guest network

Disk controller

No

Default recommended: virtio

Guest OS type

No

Optional override on final VM

Advanced migrated VM options

No

Optional extra VM settings at deploy

Windows VirtIO ISO / Cloudbase-Init URLs

Windows morphing

URLs must be reachable from the temporary minion

Use floating IP

No

Associate a public IP on the final VM (enabled by default)