How to launch a Windows Server VM
Coming from another cloud?
▸AWS·Amazon Machine Images (AMIs)
Amazon Machine Images (AMIs)
- Managed via EC2 APIs, not Glance.
- Region-specific with cross-region copy.
- Marketplace AMIs may charge hourly fees.
- Includes block device mapping in AMI.
▸Azure·Compute Gallery image definitions and versions
Azure Compute Gallery image definitions and versions
- Organized in galleries with image definitions and versioned images (Microsoft.Compute/galleries/images/versions), more structured than flat Glance images.
- Supports global replication to regions with replicas (up to 100), ZRS storage, unlike OpenStack's store-only model.
- Sharing via RBAC, community galleries, or direct share; requires gallery setup vs simple OpenStack image sharing.
- New features like Trusted Launch only in Gallery, legacy managed images deprecated.
▸DigitalOcean·Images (Distributions, 1-Click Apps, Snapshots, Backups, Custom Images)
Images (Distributions, 1-Click Apps, Snapshots, Backups, Custom Images)
- DigitalOcean classifies images into specific types (snapshots, backups, applications/1-Click, distributions, custom) rather than OpenStack Glance’s more generalized image model with visibility/properties/metadata.
- Custom images are imported by providing a URL to a supported disk format (raw, qcow2, vhdx, vdi, vmdk) and have a documented max decompressed size (100 GB), which differs from typical OpenStack flows where images are uploaded directly to Glance and size limits are operator-defined.
- DigitalOcean image operations are through /v2/images in their API, not Glance (and images also include DigitalOcean-specific fields like kind values base/snapshot/backup/custom/admin).
- DigitalOcean's "applications" images (1-Click Apps/Marketplace style) are a first-class image type, whereas OpenStack commonly treats such preconfigured stacks as separate concerns (OpenTofu modules, Heat templates, app catalogs) rather than an image 'type'.
▸Google Cloud·Machine Images (full VM state capture)
OS images
- Public images shareable across projects (e.g. debian-cloud); OpenStack typically tenant-private.
- Image families point to latest version; no OpenStack equivalent.
- Custom images stored in Cloud Storage with licensing fees for premium OS.
▸Hetzner·Images
Images
- Includes system images (OS), user images (snapshots/backups).
- API /v1/images; create via server action create_image (type=snapshot/backup).
- Billed per GB/month; backups cost 20% of server price.
- No direct image upload; custom via ISO attach or rebuild.
How to launch a Windows Server VM
Important: You are responsible for meeting all licensing requirements.
- Quake AI does not provide any licensing for Microsoft products
- You must contact your license provider and confirm you can install Microsoft software on public clouds before this installation
Required software#
-
Windows Server 2022 or 2025 ISO image to install Windows Server
-
Windows VirtIO drivers available in the following locations:
-
Cloudbase-Init software available in the following locations:
Step 1: Upload the install media#
Create the installation media in your OpenStack project before you start. It must have certain metadata attached to install successfully.
Installation methods#
Terraform method:
locals {
virtio_drivers_iso = "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso"
windows_server_2022_iso = "https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso"
windows_server_2025_iso = "https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1742.240906-0331.ge_release_svc_refresh_SERVER_EVAL_x64FRE_en-us.iso"
}
resource "openstack_images_image_v2" "virtio_drivers" {
name = "windows-virtio-drivers.iso"
image_source_url = local.virtio_drivers_iso
web_download = true
visibility = "private"
container_format = "bare"
disk_format = "iso"
properties = {
description = "Windows Server VirtIO Drivers"
hw_qemu_guest_agent = "no"
os_distro = "windows"
os_version = "VirtIO"
usage_type = "Windows Drivers"
}
}
resource "openstack_images_image_v2" "windows_2022" {
name = "windows-server-2022.iso"
image_source_url = local.windows_server_2022_iso
web_download = true
visibility = "private"
container_format = "bare"
disk_format = "iso"
properties = {
description = "Windows Server 2022 Installation Media"
hw_qemu_guest_agent = "no"
os_admin_user = "administrator"
os_distro = "windows"
os_version = "2022"
usage_type = "common"
}
}
resource "openstack_images_image_v2" "windows_2025" {
name = "windows-server-2025.iso"
image_source_url = local.windows_server_2025_iso
web_download = true
visibility = "private"
container_format = "bare"
disk_format = "iso"
properties = {
description = "Windows Server 2025 Installation Media"
hw_qemu_guest_agent = "no"
os_admin_user = "administrator"
os_distro = "windows"
os_version = "2025"
usage_type = "common"
}
}OpenStack command line:
#!/usr/bin/env bash
openstack image import \
--uri "https://software-static.download.prss.microsoft.com/sg/download/888969d5-f34g-4e03-ac9d-1f9786c66749/SERVER_EVAL_x64FRE_en-us.iso" \
--method "web-download" \
--disk-format iso \
--container-format bare \
--private \
--import \
--min-disk 6 \
--min-ram 16000 \
--progress \
windows-server-2022.iso
openstack image import \
--uri "https://software-static.download.prss.microsoft.com/dbazure/888969d5-f34g-4e03-ac9d-1f9786c66749/26100.1742.240906-0331.ge_release_svc_refresh_SERVER_EVAL_x64FRE_en-us.iso" \
--method "web-download" \
--disk-format iso \
--container-format bare \
--private \
--import \
--min-disk 6 \
--min-ram 16000 \
--progress \
windows-server-2025.iso
openstack image import \
--uri "https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso" \
--method "web-download" \
--disk-format iso \
--container-format bare \
--private \
--import \
--min-disk 6 \
--min-ram 16000 \
--progress \
windows-virtio-drivers.isoStep 2: Creating the golden master VM#
Now create a “Golden Master” virtual machine image. You use this image to create virtual machines, so follow every step to produce an OpenStack-compatible virtual machine.
Terraform is the recommended path, because the command-line version requires the Nova CLI, which does not function in Quake AI for users.
Please replace all placeholders with identifiers relevant to your environment and cloud project.
data "openstack_compute_flavor_v2" "m2a-xlarge" {
name = "m2a.xlarge"
}
data "openstack_networking_network_v2" "public" {
name = "PublicEphemeral"
}
resource "openstack_compute_keypair_v2" "administrator" {
name = "build_windows_server"
}
resource "openstack_blockstorage_volume_v3" "windows_installer" {
name = "win_server.iso"
description = "Windows Server installation media."
size = 6
image_id = "<PLACEHOLDER>"
}
resource "openstack_blockstorage_volume_v3" "windows_virtio" {
name = "virtio_drivers.iso"
description = "Windows Server driver disk."
size = 1
image_id = "<PLACEHOLDER>"
}
resource "openstack_blockstorage_volume_v3" "golden_master" {
name = "windows_server_golden_master"
description = "Windows Server build disk."
size = 64
}
resource "openstack_compute_instance_v2" "golden_master" {
name = "build_windows_server_2025_${random_string.generation.id}"
flavor_id = data.openstack_compute_flavor_v2.m2a-xlarge.id
key_pair = openstack_compute_keypair_v2.administrator.name
security_groups = [<PLACEHOLDER>]
block_device {
boot_index = 0
uuid = openstack_blockstorage_volume_v3.windows_installer.id
delete_on_termination = true
destination_type = "volume"
source_type = "volume"
disk_bus = "ide"
device_type = "cdrom"
}
block_device {
boot_index = 1
uuid = openstack_blockstorage_volume_v3.windows_virtio.id
delete_on_termination = true
destination_type = "volume"
source_type = "volume"
disk_bus = "ide"
device_type = "cdrom"
}
block_device {
boot_index = 2
uuid = openstack_blockstorage_volume_v3.golden_master.id
delete_on_termination = true
destination_type = "volume"
source_type = "volume"
}
network {
name = data.openstack_networking_network_v2.public.name
}
lifecycle {
ignore_changes = [power_state]
}
}Step 3: installing Windows#
Once the instance boots and is running, use the in-browser console in the Console to access the server.
Install the server normally until you reach the disk selection page, which is blank.

Install network drivers first#
Use the Load Driver button in the installer and navigate to the VirtIO driver disk you provided the virtual machine.
First, install the driver from the CDROM:\Drivers\NetKVM\2k25\amd64 directory. This driver lets your VM use the metadata server that Quake AI provides on subsequent boots.

Upon selecting the folder and clicking “OK” you see the available drivers, please install the network driver.

Install the VirtIO SCSI driver#
Next, install the VirtIO SCSI driver. This driver lets you select the disk for installation.
This driver is located at CDROM:\Drivers\viostor\2k25\amd64.

Select your disk for installation#
Upon installation of these drivers, your system will now have a disk available for usage. Please select that disk and begin the installation.

Step 4: Preparing the operating system drivers#
After the installation we must install additional drivers to ensure both the highest performance level and greatest stability of a Windows Virtual Machine on Quake AI.
First boot driver install#
Once the system is booted and you are able to reach the desktop, you will now need to install the remainder of the VirtIO drivers. At the root of the CD-ROM, there is an installer for this and the installer is named virtio-win-gt-x64.msi.

When installing this driver package, you will want to install all the components available:

Windows VirtIO guest tools#
Once the drivers are installed, to increase operability with the underlying cloud infrastructure, it is optionally recommended you install the Windows guest tools as well.
These tools can be located on the same CDROM and the installer is named virtio-win-guest-tools.exe.

Step 5: Enable remote desktop#
At this point, you should transition to remote desktop. You can enable remote desktop using the following Powershell commands.
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server" -Name "fDenyTSConnections" -Value "0"
Set-NetFirewallRule -Name "RemoteDesktop-In-TCP-WS" -Enabled True
Get-NetFirewallRule | Where-Object Name -like 'RemoteDesktop*' | Set-NetFirewallRule -Enabled True Step 6: install Cloudbase-Init#
Cloudbase-Init is the utility which will configure a Windows Server when launched in Quake AI. This tool is critically important.
WARNING: Do not use Microsoft Edge to install this, it will cause issues with the sysprep at the end.
powershell -Command "(new-object net.webclient).DownloadString('https://www.cloudbase.it/downloads/CloudbaseInitSetup_Stable_x64.msi')"Once you have the Cloudbase-Init tool downloaded, you should install all modules.

When configuring the Cloudbase-Init tool, you should use the “Administrator” username and COM1 for communication. Do not run Cloudbase-Init as a LocalSystem service. Also make sure to check the box “Use metadata password”.

After this installation has completed, you should now be presented with two checkboxes. You should perform the sysprep and shut down the virtual machine now.

Step 7: Create the image#
At this point you should now create an image of the operating system disk of this virtual machine, and you can now create virtual machines from this image and establish things like your Windows Cluster, Active Directory Domain or other useful Microsoft features within your OpenStack Project.
Usage Guidelines
The sample code, software libraries, command line tools, proofs of concept, templates, and other related technology on this page (including any of the foregoing that is provided by Quake AI personnel) is provided to you as Quake AI Content under the Quake AI Customer Agreement, or the relevant written agreement between you and Quake AI (whichever applies). Do not use this Quake AI Content in your production accounts, or on production or other critical data. You are responsible for testing, securing, and optimizing the Quake AI Content (such as sample code) as appropriate for production grade use based on your specific quality control practices and standards. Deploying Quake AI Content may incur Quake AI charges for creating or using Quake AI chargeable resources, such as running Compute instances or storing data in Object Storage. Your use is also subject to the Acceptable Use Policy.
For the full policy, see Usage Guidelines.
Last validated: 04.06.2026
Quick answers
- Why does `openstack image save` write a 0-byte file for my boot-from-volume instance?CLI
- Why does `openstack server create` fail with "Only volume-backed servers are allowed for flavors with zero disk"?CLIAPITerraform
- Why does my project still have a 10 GiB Cinder volume after I deleted my instance?CLIAPI
See Also
Instances
Prerequisite
How to customize a template's image and flavor
Shares: Images, Terraform
How to back up and restore a Quake AI VM
Shares: Images, Instances
How to boot a virtual machine from an ISO image
Shares: Images, Instances
How to build a golden VM image with Packer
Shares: Images, Instances