Skip to main content

2 september 2026

Managing Images for OpenStack Provider Deployments

To add an OpenStack image for use with a Horizon Cloud on OpenStack Edge, you must first add an image in your Private Cloud Director or define an image by using your OpenStack open-source solution. The Horizon Cloud Image Management System (IMS) is not currently available for Horizon Cloud on OpenStack.

Note: Horizon Cloud on OpenStack is currently available in Limited Availability (LA) mode only.

This example procedure assumes the use of a Platform9 Private Cloud Director (PCD) host environment, rather than that of an OpenStack open-source solution provider. The sample screens are provided for flow guidance only as you work through the steps.

Step 1 - Upload Windows and VirtIO ISO files

  1. Obtain your Windows Desktop .iso.

  2. Obtain the KVM VirtIO Drivers .iso for Windows. For details, see Creating Windows virtual machines using virtIO drivers in Fedora documentation.

  3. Log in to your Private Cloud Director console and click Virtual Machines > Images > Add Image.

    PCD screen showing the Add Image button

  4. Select the .iso file, give it a name, and select iso as the Disk format. Select Add Image to start the upload process.

    PCD screen showing the iso selection options

  5. Repeat the above steps for the VirtIO Windows Drivers .iso file.

Step 2 - Create attachable Volumes for Windows and VirtIO .iso files

  1. In the Private Cloud Director console, click Storage > Volumes and then select Create New Volume.

    PCD screen showing the Create New Volumes option

  2. Select Image as the source and then search for and select your uploaded Windows .iso file.

    PCD screen showing the image source selection

  3. Give the new volume a name and ensure its size is slightly larger than the .iso. Also ensure that you mark this volume as bootable so that it can be used to boot the Windows Setup.

    PCD screen showing the new volume name and bootable size

  4. Repeat the above steps for the VirtIO Windows Drivers .iso. Note that you do not need to mark the VirtIO Volume as bootable.

Step 3 - Create a Windows Virtual Machine via Command Line

  1. Ensure that the OpenStack Client CLI tools are installed on your system. See Install the OpenStack command-line clients in OpenStack product documentation.

  2. To obtain the required environment variables, select the cog/gear icon in the top right corner of the PCD console and then select API Access.

    PCD screen showing the cog icon and API Access button

  3. Copy the environment variables to a temporary text file. You will need to copy and paste these shortly.

    PCD screen showing the cog icon and API Access button

  4. Ensure that you have direct network connectivity (VPN or LAN) to the Infrastructure Hosts.

    In the next steps you will create the Virtual Machine in PCD. You must complete these next steps using the CLI. Creating a Virtual Machine with the required parameters is not available using the UI.

  5. Begin the process of creating the VM by opening a terminal on your device. Paste the environment variables that you copied from the previous step into the terminal. Be sure to update environment variable values such as OS_USERNAME and OS_PASSWORD with your specific values.

    Terminal window showing copy and pasted environment variable commands

    Sample environment variable commands are as below:

    export OS_USERNAME=MyName@companyname.com
    export OS_PASSWORD=MySecretPassword
    export OS_AUTH_URL=https://hcs-regionone.app.staging-pcd.platform9.com/keystone/v3
    export OS_AUTH_TYPE=password
    export OS_IDENTITY_API_VERSION=3
    export OS_REGION_NAME=RegionOne
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=service
    export OS_INTERFACE=public
    
  6. Add two new environment variables for Virtual Machine Volume Name and Virtual Machine Name as below.

    export VM_VOL_NAME=APM-W11-Vol1
    export VM_NAME=APM-W11-MasterImage
    
  7. Create a new Volume (Virtual Hard Disk for C:) for the VM. A sample command line is shown below that uses the $VM_VOL_NAME variable that you just created.

    openstack volume create --size 80 -- bootable $VM_VOL_NAME

  8. Copy the ID of the newly created volume and create a new variable for the Volume ID. A sample command and reference image is shown below.

    export VM_VOL_ID=3df9859e-e10f-438b-88b1-8ef109f8a1d6

    Terminal window the id to use for the VM_VOL_ID variable value

  9. In the same terminal window, set the required parameters on the Volume for Windows. Sample commands are shown below:

    openstack volume set \
    --image-property hw_boot_menu=true \
    --image-property hw_firmware_type=uefi \
    --image-property hw_machine_type=q35 \
    --image-property hw_tpm_model=tpm-crb \
    --image-property hw_tpm_version=2.0 \
    --image-property hw_cdrom_bus=sata \
    --image-property hw_disk_bus=scsi \
    --image-property hw_scsi_model=virtio-scsi \
    --image-property os_secure_boot=required \
    --image-property os_type=windows \
    $VM_VOL_NAME
    
  10. Locate the Volume ID for your Windows .iso Volume.

    openstack volume list

  11. Copy the ID of the Windows .iso Volume and create a new variable for the Windows .iso Volume.

    export WINISO_VOL_ID=de8c8727-b77d-4335-be7f-7d580046c82f

  12. Copy the ID of the VirtIO .iso Volume and create a new variable for the VirtIO .iso Volume.

    export VIRTIO_VOL_ID=d1f6b83a-512a-41b9-a59c-52643adf87e

  13. Identify the ID of the Network for the Virtual Machine.

    openstack network list

  14. Create the Virtual Machine. Note that Server is the terminology for a VM in OpenStack.

    Note: Ensure that $WINISO_VOL_ID is set as boot_index=2 so that it boots initially when there is no OS, so that the Windows Volume will be first to boot when installed.

    openstack server create \
    --flavor m1.medium \
    --network $NETWORK_ID \
    --block-device source_type=volume,uuid=$VM_VOL_ID,destination_type=volume,device_type=disk,boot_index=0 \
    --block-device source_type=volume,uuid=$WINISO_VOL_ID,destination_type=volume,device_type=cdrom,boot_index=1 \
    --block-device source_type=volume,uuid=$VIRTIO_VOL_ID,destination_type=volume,device_type=cdrom,boot_index=2 \
    $VM_NAME
    

Step 4 - Install Windows in the Virtual Machine

  1. In the PCD console, click Virtual Machine in the left pane navigation and click the Virtual Machines tab to locate and select your VM (for example, APM-W11-MasterImage).

  2. Click Console to view the VM's console window.

  3. Continue through the setup procedure until you are prompted for an install location.

  4. When prompted to select the location to install Windows 11, click Load Driver.

    There are no drivers natively available for a KVM VM disk. You must use the VirtIO .iso to install the driver to continue.

  5. Locate the virtio-win mounted .iso and select the E:\amd64\w11 folder. This folder contains the driver for the VirtIO Disk Controller.

    Install driver window displaying the virt-win selection

  6. Proceed to install Windows as normal.

  7. When prompted Is this the right country or region?, enter Audit Mode by pressing Ctrl+Shift+F3 as prompted.

  8. When Windows reboots, locate the virtio-win mounted .iso and install the VirtIO-Win-Drivers from the disk.

    Install driver window displaying the VirtIO-Win-Drivers selection

  9. After installing the drivers, reboot the VM to prepare for the next steps.

Step 5 - Download and Install Horizon Agents

  1. Log in to your Omnissa Customer Connect account and download the latest Horizon Agents Installer (HAI) at Horizon Agents Installer 64-Bit.

  2. Accept the default install parameters (you can optionally enable additional checkboxes), select the Automatically restart system on successful completion checkbox, and click Proceed with installation.

Step 6 - Install and Configure Cloudbase-Init

  1. Download Cloudbase-Init. See Cloudbase-Init.

    You do not need to specify any details to download the installer. Scroll down the page until you see a link that says No, just show me the downloads and click that link.

  2. Select Run Cloudbase-Init services as LocalSystem.

  3. After Cloudbase-Init is installed, go to C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf and open cloudbase-init.conf.

  4. Replace the entire contents of cloudbase-init.conf with the following entries and then save the file.

    [DEFAULT]
    verbose=true
    debug=true
    log_dir=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\log\
    log_file=cloudbase-init.log
    default_log_levels=comtypes=INFO,suds=INFO,iso8601=WARN,requests=WARN
    mtu_use_dhcp_config=true
    ntp_use_dhcp_config=true
    local_scripts_path=C:\Program Files\Cloudbase Solutions\Cloudbase-Init\LocalScripts\
    check_latest_version=false
    metadata_services=cloudbaseinit.metadata.services.httpservice.HttpService
    plugins=cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin
    allow_reboot=false
    
  5. Prepare the Guest OS as described at Prepare a Guest Windows Operating System for Remote Desktop Deployment in Horizon product documentation with the following exceptions:

    • Ignore the steps that direct you to install Omnissa Tools.
    • Do not add the Virtual Machine to the domain.
    • Do not generalize with Sysprep at this stage.

Step 7 - Download and Run the Windows OS Optimization Tool for Horizon

  1. Download the most recent OS Optimization Tool from Omnissa Customer Connect at Download OS Optimization Tool.

  2. From the OS Optimization Tool (OSOT) top bar menu, select Optimize to run the optimization phase of the Windows OS Optimization Tool phase.

    OS Optimization Tool showing how to run the Optimization phase of the tool

  3. Click the Analyze button and then click the Optimize button to specify the selected optimizations for the VM.

    OS Optimization Tool showing Analyze button

    OS Optimization Tool showing Optimize button

  4. From the same OSOT top bar menu where you selected Optimize previously, select Generalize to run the generalize phase of the Windows OS Optimization Tool.

  5. On the resultant Instructions page, leave the administrator Password field blank, ensure that the Automatic Restart checkbox is enabled, and then click Generalize.

    After the VM reboots, it will no longer be in Audit Mode and the VM will automatically log in as the Administrator account.

    Potential issue and workaround: If generalization fails and the VM does not automatically reboot, review the log files at C:\Windows\System32\Sysprep\Panther. If you see log entry content that is similar to the following:

    BiUpdateEfiEntry failed c000000d
    BiExportBcdObjects failed c000000d
    BiExportStoreAlterationsToEfi failed c000000d
    Failed to export alterations to firmware. Status: c000000d
    

    Afterwards, try the following workaround on the VM:

    1. Go to Start > Run > tpm.msc.
    2. Select Clear TPM on the right side panel.
    3. When prompted to reboot, select OK and the machine should then proceed as expected.
  6. Create a backup Local Administrator account on the VM Tto provide a way to log into the machine when disabling the built-in Administrator account.

    Windows OS sys admin screen showing how to create a backup local administrator account

  7. For security purposes, set a password on the Administrator account.

  8. From the same OSOT top bar menu where you selected Generalize previously, select Finalize to run the finalization phase of the Windows OS Optimization Tool.

  9. From the resultant page, accept the default checkbox selections and click Finalize.

    This action will take several minutes to complete. Allow this phase of the optimization tool to complete before proceeding.

Step 8 - Finalize the Snapshot VM Configuration for Deployment

  1. In the Private Cloud Director console, power off the virtual machine by selecting the VM (for example, APM-GoldenImage-v1) and clicking Power Actions > Stop. THe Power Actions menu is available by clicking the 3 vertical dots on the far right of the UI.

  2. From the same 3 vertical dots on the far right of the UI as above, click Other Actions > Manage Volumes.

  3. Detach the VirtIO and Windows Installer volumes only. A sample screen is shown below.

    Manage Volumes screen showing the 2 items to detach

  4. Edit the snapshot VM and set the block_device_mapping properties to set "delete_on_termination": true.

  5. In the left pane navigation, click Virtual Machines > Images. Select the VM Snapshots tab and select your snapshot.

  6. Select Edit Properties and locate the block_device_mapping property. In its value field, find the key named delete_on_termination, change its value from false to true, and click Update Properties.

    Edit Properties paage showing the block device mapping property and the Update Properties button

Was deze pagina nuttig?

Feedback geven over dit onderwerp

Was dit onderwerp nuttig?

Vermeld geen persoonlijke of vertrouwelijke informatie.

Link genereren…