[et-mgmt-tools] RFC: virt-manager: Redesigned 'New VM' wizard

Cole Robinson crobinso at redhat.com
Fri Feb 27 22:50:15 UTC 2009

Hi all,

The current 'New VM' wizard has clearly started to show its age. The
original design was largely based on xen specific assumptions and the
state of libvirt/virtinst at the time: many of those assumptions don't
apply today, or require a bit more thought since we now support both xen
and qemu based VMs.

You can find a patch for a new implementation of the 'New VM' wizard here:


I hope you'll agree it's a much simpler and usable layout, without
sacrificing functionality (even laying the groundwork for future
improvements). This design was largely done by Tim Allen (former Red
Hatter) and Jeremy Perry (current Red Hatter), so a big thank you to them.

One of the biggest changes from the old design is that we don't ask
upfront about paravirt vs. fullvirt, VM architecture, or qemu vs. kvm
vs. xenner. For new users, this has been an endless pain point ("Why
can't I install a PV kvm guest?" among others) and is really a
distinction we don't need to force on people upfront: we are certainly
in a position to choose sensible defaults (and for kvm, paravirt/virtio
has always been setup in the background depending on what OS version
is being installed). The logic for the defaults is as follows:

- For the qemu libvirt driver, use the first available of the following:
kvm, plain qemu, xenner.

- For the xen libvirt driver, use paravirt if the user selects a URL
install and the tree supports it, otherwise use fullvirt.

- Always default to the host architecture for new VMs.

We allow the user to deviate from these defaults in the final screen
under the 'Advanced Options' section.

Also, you'll notice there is a generic 'Computer' icon in the wizard
header: this will soon be replaced by a custom icon.

So, some screenshots!

Page 1: VM Name and Install method


We totally scrapped the 'intro' page: I don't think anyone will miss it.
Having the 'name' box occupy an entire page by itself was also a bit
overkill, so we did away with that as well.

The one new piece here is the option to choose the libvirt connection to
install on. Rather than have the 'New' button on the main manager window
be conditionally sensitive, the user can now always launch the wizard,
choosing the connection from there. If there is only 1 active
connection, the drop down will appear as a label.

Page 2: Install media info


Pending what the user chooses on page 1, the appropriate screen will be
shown on page 2. This hasn't deviated much from the current options: the
one difference is that the OS Type/Variant drop downs will always be
here. This will allow us in the future to offer automatic distro
detection per selected install media (we may have this for URL installs
by the time the release goes out).

Since PXE installs require no extra input, the screen will only have the
OS Type/Variant option listed.

Page 3: CPU + Mem details


We dropped the max memory vs. default memory split in the existing
wizard: this doesn't have much meaning the qemu/kvm world, and even for
xen isn't something that needs to be asked up front. The user can always
change it later.

Also, rather than list tons of warning information about overcommitting
vcpus, we simply cap the amount at the number available on the host. If
for some reason a user wants to allocate more than the host amount of
virtual cpus to a VM (say for development purposes) it can easily be
done post-install.

Page 4: Storage


The main change here is that we removed the block device vs. file device
dichotomy: we are pretty capable of determining this distinction behind
the scenes.

The option is also now available to skip adding storage altogether: this
is useful in the case of Live CDs or diskless PXE booting.

When adding storage though, the two options are now:

1 - "Create a disk image on the computer's hard drive": We set up a
libvirt storage pool behind the scenes to point to the default location
(if using PolicyKit or running as root, this is /var/lib/libvirt/images)
and allocate a disk image based on the requested size.

In the future, the default location will be configurable with a global

2 - "Use managed or other existing storage" : This allows pointing to an
existing path, or provisioning more complex storage on demand (this is
dependent on a libvirt storage API aware browser dialog, which is
ongoing work. For the time being, this just launches a local GTK file

The one piece not shown here is the option to choose sparse Vs.
non-sparse. We will be putting this back in before the final version is

Page 5: Summary and Advanced Options


The summary section is pretty straight forward, no surprises here.
The 'Advanced Options' section encompasses networking, hypervisor, and
architecture options. The hypervisor and arch defaults were explained above.

For networking, the default is:

- A bridge device if any exist, else
- Virtual Network 'default' (comes out of the box with libvirt), else
- First available virtual network, else
- no networking!

This logic will be globally configurable at some point, if you wanted to
use a specific bridge device or virtual network for all new VMs. We also
decided to put all the available networking options into 1 drop down,
rather than have 2 separate sections for bridges vs. virtual networking.

I think that covers all the significant bits, hopefully other than that
the screenshots speak for themselves. Any feedback is appreciated: none
of this set in stone.


More information about the et-mgmt-tools mailing list