Skip to content

How to launch a Windows Server VM

How-to · Updated Jun 2026

Coming from another cloud?

▸AWS·Amazon Machine Images (AMIs)

Amazon Machine Images (AMIs)high

  • Managed via EC2 APIs, not Glance.
  • Region-specific with cross-region copy.
  • Marketplace AMIs may charge hourly fees.
  • Includes block device mapping in AMI.
AWS docs ↗
▸Azure·Compute Gallery image definitions and versions

Azure Compute Gallery image definitions and versionshigh

  • 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.
Azure docs ↗
▸DigitalOcean·Images (Distributions, 1-Click Apps, Snapshots, Backups, Custom Images)

Images (Distributions, 1-Click Apps, Snapshots, Backups, Custom Images)high

  • 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'.
DigitalOcean docs ↗
▸Google Cloud·Machine Images (full VM state capture)

OS imageshigh

  • 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.
Google Cloud docs ↗
▸Hetzner·Images

Imageshigh

  • 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.
Hetzner docs ↗
Before this

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:

JSON
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:

bash
#!/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.iso

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

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

Windows on Quake AI Screen 1

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.

Windows on Quake AI Screen 2

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

Windows on Quake AI Screen 3

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.

Windows on Quake AI Screen 4

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.

Windows on Quake AI Screen 5

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.

Windows on Quake AI Screen 6

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

Windows on Quake AI Screen 7

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.

Windows on Quake AI Screen 8

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.

Windows on Quake AI Screen 9

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

Windows on Quake AI Screen 10

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.

Windows on Quake AI Screen 11

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

Was this page helpful?