cloudbase / windows-imaging-tools

Tools to automate the creation of a Windows image for OpenStack, supporting KVM, Hyper-V, ESXi and more.
Apache License 2.0
680 stars 227 forks source link

Windows Imaging Tools

Master branch

Windows OpenStack Imaging Tools automates the generation of Windows images.
The tools are a bundle of PowerShell modules and scripts.

The supported target environments for the Windows images are:

The generation environment needs to be a Windows one, with Hyper-V virtualization enabled.
If you plan to run the online Windows setup step on another system / hypervisor, the Hyper-V virtualization is not required.

The following versions of Windows images (both x86 / x64, if existent) to be generated are supported:

To generate Windows Nano Server 2016, please use the following repository:

https://github.com/cloudbase/cloudbase-init-offline-install

Workflow of Windows imaging tools

Fast path to create a Windows image

Requirements:

Steps to generate the Windows image

PowerShell image generation example for OpenStack KVM (host requires Hyper-V enabled)

git clone https://github.com/cloudbase/windows-openstack-imaging-tools.git
pushd windows-openstack-imaging-tools
Import-Module .\WinImageBuilder.psm1
Import-Module .\Config.psm1
Import-Module .\UnattendResources\ini.psm1
# Create a config.ini file using the built in function, then set them accordingly to your needs
$ConfigFilePath = ".\config.ini"
New-WindowsImageConfig -ConfigFilePath $ConfigFilePath

# To automate the config options setting:
Set-IniFileValue -Path (Resolve-Path $ConfigFilePath) -Section "DEFAULT" `
                                      -Key "wim_file_path" `
                                      -Value "D:\Sources\install.wim"
# Use the desired command with the config file you just created

New-WindowsOnlineImage -ConfigFilePath $ConfigFilePath

popd

Image generation workflow

New-WindowsCloudImage

This command does not require Hyper-V to be enabled, but the generated image
is not ready to be deployed, as it needs to be started manually on another hypervisor.
The image is ready to be used when it shuts down.

You can find a PowerShell example to generate a raw OpenStack Ironic image that also works on KVM
in Examples/create-windows-cloud-image.ps1

New-WindowsOnlineImage

This command requires Hyper-V to be enabled, a VMSwitch to be configured for external
network connectivity if the updates are to be installed, which is highly recommended.

This command uses internally the New-WindowsCloudImage to generate the base image and
start a Hyper-V instance using the base image. After the Hyper-V instance shuts down,
the resulting VHDX is shrinked to a minimum size and converted to the required format.

You can find a PowerShell example to generate a raw OpenStack Ironic image that also works on KVM
in Examples/create-windows-online-cloud-image.ps1

Frequently Asked Questions (FAQ)

The image generation never stops

I booted an instance with the image and I got a BSOD

I booted an instance with the image and I got a forever Windows loading screen

Useful links on ask.cloudbase.it

For developers

Running unit tests

You will need PowerShell Pester package installed on your system.

It should already be installed on your system if you are running Windows 10.
If it is not installed you can install it on Windows 10 or greater:

Install-Package Pester

or you can clone it from: https://github.com/pester/Pester

Running the tests in a closed environment:

cmd /c 'powershell.exe -NonInteractive { Invoke-Pester }'

This will run all tests without polluting your current shell environment.
This is not needed if you run it in a Continuous Integration environment.