VMWARE → STACKIT · TUTORIAL
Turning VMware templates into STACKIT images
In an RVTools export a template is a row whose Template column says True. StackToIT maps it to a STACKIT image, writes no Terraform for it and hands it to a Platform Architect as a manual step. This walk-through uses a small build estate with three templates, a golden image that nobody flagged, and two VMs, and ends with what to change before you apply anything.
Step 1: let the Template column decide
A demo export written for this page and assessed by StackToIT on 4 November 2026. Left: the first rows of the vInfo sheet. Right: three lines of migration/source-target.csv from the run, the file that says what each source row became.
VM,Powerstate,Template,CPUs,Memory,NICs,Disks,Provisioned MiB,In use MiB,Primary IP Address,Datacenter,Cluster,Host,Folder,Annotation,OS according to the configuration file,OS according to the VMware Tools,VM UUID
tpl-ubuntu2204,poweredOff,True,2,4096,1,1,40960,7200,,DC-Hamburg,CL-Build,esx21,templates,Ubuntu 22.04 base image 2026-09,Ubuntu Linux (64-bit),,4207-cccc-0001
tpl-win2022,poweredOff,True,4,8192,1,2,92160,31000,,DC-Hamburg,CL-Build,esx21,templates,Windows Server 2022 base image,Microsoft Windows Server 2022 (64-bit),,4207-cccc-0002
tpl-rhel9,poweredOff,True,2,4096,1,1,30720,5400,,DC-Hamburg,CL-Build,esx21,templates,RHEL 9 base image,Red Hat Enterprise Linux 9 (64-bit),,4207-cccc-0003
build-gold01,poweredOff,False,2,4096,1,1,40960,9100,,DC-Hamburg,CL-Build,esx22,templates,Golden image kept as a normal VM - not flagged as template,Debian GNU/Linux 12 (64-bit),,4207-cccc-0004source_unit,source_type,stackit_target,stackit_resources,drafted_resources,standing,kept,changed,accepted,to_do
vm.build-gold01,vmware_vm,STACKIT Compute Engine,stackit_server; stackit_volume; stackit_network_interface; stackit_image,stackit_server,TARGET,0,6,0,36
vm.tpl-ubuntu2204,vmware_vm,"This draft writes no stackit_image for this unit: VM template: convert the VMDK to qcow2/raw and upload it with stackit_image, or rebuild it from a STACKIT public image.",,,NOT_DRAFTED,0,0,0,37Three templates, one lookalike
tpl-ubuntu2204, tpl-win2022 and tpl-rhel9 have Template=True and become class REPLATFORM with the target STACKIT image. build-gold01 sits in the same folder and is powered off, but its Template column says False, so it is planned as a server.
Flag, not folder
StackToIT reads the flag, not the folder name or the annotation. If a golden image is a template in your mind, flag it in vCenter before you export, or decide on purpose that it moves as a server.
No Terraform for a template
The file says it plainly: the draft writes no stackit_image for these three units. Each stays NOT_DRAFTED until a person acts, which is why index.html lists them under Units left for the architect.
Step 2: assess and read the plan
Run the assessment
stacktoit assess ./rvtools ./vmware-migration reads the CSV files on your computer and writes the package. The console of this run: 7 units, 4 drafted and 3 left for the architect.
Find the template work
execution/manual/actions.md holds one entry for the three templates, work package WP-03, owner Platform Architect. Each template carries 17 open critical settings, among them disk-capacity, guest-os and memory-reservation, which assurance/critical-semantics.json explains one by one.
Find the consumers
Every server in terraform/compute.tf reads its boot image from a variable named after the VM, such as vm_ci_runner01_image_id. The run does not know that ci-runner01 was cloned from tpl-ubuntu2204, because the annotation is free text.
What the plan asks, and where the image id goes
Left: the two lines of the manual step that name the decision; {resource} is the file's placeholder for each of the three template names, which it lists below the step. Right: the server of ci-runner01 and its image variable from terraform/, comment lines left out.
- What: Decide how {resource} (vmware_vm) moves to STACKIT and set its target up by hand, or record that it needs none: the draft writes no resource for it
- Why: VM template: convert the VMDK to qcow2/raw and upload it with stackit_image, or rebuild it from a STACKIT public image.resource "stackit_server" "vm_ci_runner01" {
project_id = var.project_id
name = "ci-runner01"
machine_type = var.vm_ci_runner01_machine_type
availability_zone = var.availability_zone
boot_volume = {
source_type = "image"
source_id = var.vm_ci_runner01_image_id
size = 40
}
network_interfaces = [stackit_network_interface.vm_ci_runner01_nic1.network_interface_id]
}
variable "vm_ci_runner01_image_id" {
type = string
description = "STACKIT image converted from the boot disk of VM ci-runner01 (qcow2 or raw)."
}One image, several variables
Each VM gets its own image variable, and its description asks for the image converted from that VM's own boot disk. Setting it to the template image instead means rebuilding the server from the template: only do that where provisioning recreates everything that lives on the disk, as it may for a CI runner.
Boot disk only
The variable description speaks of the boot disk. A second disk of a template, like the 30 GiB Hard disk 2 of tpl-win2022, is not part of that image; decide whether its content is recreated by provisioning.
Step 3: convert or rebuild, per template
The plan names two routes. Which one fits depends on what the template contains and on the licence.
| Template | Route to consider | What decides it |
|---|---|---|
| tpl-ubuntu2204 | Rebuild from the Ubuntu 22.04 image STACKIT offers, or convert the disk | The STACKIT Linux image list includes Ubuntu 22.04. Rebuild when your provisioning is scripted; convert when the template carries software that is hard to reinstall. |
| tpl-rhel9 | Rebuild from the Red Hat Enterprise Linux 9 image, or convert the disk | The list includes RHEL 9. For images you provide yourself, STACKIT puts the licensing responsibility on you, so check your subscription terms first. |
| tpl-win2022 | Start from the Windows Server 2022 image, or ask STACKIT about a custom image | STACKIT lists Windows Server 2025, 2022, 2019 and 2016 (Standard), licensed for the operating system only. It states that Windows licences cannot be migrated and that a custom Windows image needs a request to STACKIT. |
| build-gold01 | Treat as a server, or flag as a template and treat as an image | Debian 12 is on the STACKIT list. Decide whether anyone still clones from this machine before you pay to move it. |
The run adds an INFO note to the Windows VMs: prepare the image for the new virtual hardware (storage and network drivers) before conversion, and check how Windows licences are provided on STACKIT.
Step 4: convert, upload, check, share
These steps follow the STACKIT how-to for custom images. The conversion command is general practice, not something StackToIT runs.
Export and convert the disk
Export the VMDK of the template, then convert it to qcow2 or raw, for example with qemu-img convert. The STACKIT page shows the raw conversion.
Create the image record
Send a POST to the images endpoint of the IaaS API with the name, active set to true and diskFormat set to raw, qcow2 or iso. The answer contains the image id and an upload URL.
Upload the file
PUT the converted file to that URL. The URL is valid only for this image and expires after a few hours; the maximum image size is 70 GB.
Wait for AVAILABLE
Read the image back until its state is AVAILABLE. Only then does it make sense to put its id into the variable of a server.
Share it where it is needed
An image can be shared with other projects, or with the parent organization. Sharing works only inside one organization.
Change this before you apply
Image ids
Fill the vm_*_image_id variables in review/target-values.tfvars with ids of images that are AVAILABLE, and run the assessment again on the same output folder.
Machine types
Every server asks for a machine type and states the source size, for example 4 vCPU and 8 GiB for app-win01. The STACKIT machine types page lists the families.
Network prefix
RVTools exports no subnet mask, so the prefix of PG-Build is a variable that lists the addresses seen on it, 10.40.10.21 and 10.40.10.31.
The template decision
Record per template whether it is converted, rebuilt or dropped. The plan step is done when the counterpart is set up and checked, or when you record that none is needed.
Questions about templates
Does StackToIT create the STACKIT image?
No. For a template it writes no resource and creates one manual step. The conversion and the upload are carried out by a person, and nothing in the package touches your VMware or STACKIT environment.
Why does a template have no network interface in the draft?
Because the draft writes nothing for it. In the demo export the template adapters are not connected and carry no address, so there is no address to keep.
Which image formats does STACKIT accept?
The how-to for custom images names raw, qcow2 and iso as disk formats. The plan for a VM disk asks for qcow2 or raw.
Can I keep one template image for many servers?
Yes, for new servers and for servers you deliberately rebuild from it. A migrated VM's image variable expects the image of its own boot disk, so pointing it at the template image discards what changed on that VM since it was cloned. Share the image if the servers live in other projects of the same organization.
Sources
Your next move: STACKIT.
Tell us about your estate. We show you what StackToIT delivers for it: target architecture, Terraform artifacts and a structured migration plan.