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.

Example inputRVTools_tabvInfo.csv
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-0004
StackToIT outputmigration/source-target.csv
source_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,37
  • Three 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

  1. 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.

  2. 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.

  3. 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.

Manual stepexecution/manual/actions.md
- 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.
STACKIT Terraform by StackToITterraform/compute.tf and variables.tf
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.

TemplateRoute to considerWhat decides it
tpl-ubuntu2204Rebuild from the Ubuntu 22.04 image STACKIT offers, or convert the diskThe 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-rhel9Rebuild from the Red Hat Enterprise Linux 9 image, or convert the diskThe list includes RHEL 9. For images you provide yourself, STACKIT puts the licensing responsibility on you, so check your subscription terms first.
tpl-win2022Start from the Windows Server 2022 image, or ask STACKIT about a custom imageSTACKIT 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-gold01Treat as a server, or flag as a template and treat as an imageDebian 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.