Skip to content

docs(virtualization): add a VMware vSphere migration guide - #673

Draft
Andrei Kvapil (kvaps) wants to merge 4 commits into
mainfrom
docs/vmware-migration
Draft

docs(virtualization): add a VMware vSphere migration guide#673
Andrei Kvapil (kvaps) wants to merge 4 commits into
mainfrom
docs/vmware-migration

Conversation

@kvaps

Copy link
Copy Markdown
Member

Adds a migration guide for the forklift.cozystack.io import API: register a vCenter connection, name the machines, get VMDisk and VMInstance objects.

Placed in next, not a released version: the API it documents is still in review (cozystack/cozystack#3931, design in cozystack/community#62). It should not be published until that lands.

The guide is written from an end-to-end migration run against a real vSphere environment rather than from the API surface, which is why the pre-flight section is as long as it is. Each check in it corresponds to a failure that actually happened, and every one of them surfaces late and blames something else:

  • a WaitForFirstConsumer storage class deadlocks the transfer — and it is frequently the cluster default;
  • an ESXi address inside the cluster's Service CIDR has its VDDK connection swallowed by service routing, failing after validation has already passed, with an NBD error that reads like a missing disk;
  • a vCenter username without its SSO domain is reported as an incorrect password;
  • a Forklift deployment can serve a certificate its own rotated CA no longer matches, because the operator updates the secret without restarting the pods.

There is also an administrator section on building the VDDK image. The kit is licensed software that VMware distributes to registered users only and nobody may redistribute, which is why Cozystack ships no image and the platform value starts empty — leaving an administrator with a build step and, until now, no instructions for it. It covers matching the kit version to vSphere, building for linux/amd64 (an arm64 build pulls and then fails to execute on the workers), making a private registry pullable from the namespaces that need it, and confirming the pull before the first migration rather than during it.

The rest documents what the result actually is: the transfer is cold, so the source is powered off; nothing is copied twice; the imported VM starts Halted; and the outputs outlive the task that produced them. Limitations are stated explicitly — vSphere only, cold only, one storage class per task, pod networking, no guest conversion — so nobody plans a Windows migration around a path that copies disks as-is.

Documents the forklift.cozystack.io import API: registering a vCenter
connection, running an import, and what the result is. Sits beside the Proxmox
guide, which covers the manual export-and-upload path.

The pre-flight section is the part that matters. Every check in it corresponds
to a failure observed on a live cluster, and each one surfaces late and names
something other than its cause: a WaitForFirstConsumer storage class that
deadlocks the transfer, an ESXi address colliding with the cluster Service CIDR
so the VDDK connection is swallowed by service routing, a vCenter username
missing its SSO domain reported as a wrong password, and a Forklift deployment
serving a certificate its own rotated CA no longer matches.

Assisted-By: Claude
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
The VDDK is licensed software: VMware distributes it to registered users only
and nobody may redistribute it, which is why Cozystack ships no image and the
platform value starts empty. That leaves an administrator with a build step and
no instructions for it.

Covers where to get the kit, matching its version to vSphere, the Containerfile,
building for linux/amd64 (an arm64 build pulls and then fails to execute on the
workers), making a private registry pullable from the namespaces that need it,
and a one-liner to confirm the pull before the first migration rather than
during it.

Also notes that Proxmox is not a provider the engine supports, so readers
arriving from Proxmox are sent to the guide that applies to them instead of
working through a vCenter setup that will not help.

Assisted-By: Claude
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
Leaves the page to describe the vSphere path on its own terms.

Assisted-By: Claude
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
@netlify

netlify Bot commented Aug 31, 2026

Copy link
Copy Markdown

Deploy Preview for cozystack ready!

Name Link
🔨 Latest commit 102adfb
🔍 Latest deploy log https://app.netlify.com/projects/cozystack/deploys/6a96d6740d8f5d0007f14f81
😎 Deploy Preview https://deploy-preview-673--cozystack.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai

coderabbitai Bot commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

The limitations section said a guest must already carry virtio drivers,
which stopped being true when imports started defaulting to the SATA
bus. It also understated the failure: a guest without virtio does not
fail the import, it imports successfully and then does not boot.

Adds the section the lab run showed was missing — why the bus is what it
is, how to move to virtio once the drivers are in place, and what
happens to a machine with more disks than the controller has ports.

Assisted-By: Claude
Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant