as a next step for the cockpit-machines, I plan to implement the "Create VM" functionality.
Before doing that, I would like to collect ideas, agreement on scope and preferably on design.

The long term vision is support for (almost) all features as virt-manager has.
Definitely, path to this goal has to be splited into smaller steps, starting with something generic enough but providing just the minimum and useful functionality.

The component will be reusable for both "New VM" and "Edit VM" flows.
Will be implemented as a wizard, user can navigate back and forth, maybe even "jump" into a step of his choice.
Wizard can be canceled in every step.

All write operations are postponed until final "submit".

Optional "external provider" will be able to extend the wizard dialogs and will handle the "Submit".

Initial implementation:
Wizard dialog 1: Basic props
  - VM name
  - vcpus
  - memory
  - qemu connection (whether session or system)
Wizard dialog 2: Disks
  - single disk's params
Wizard dialog 3: Boot order
  - cdrom iso file
  - from an associated disk
Wizard dialog 4: Consoles
  - select none or any combination from
    - SPICE
    - VNC
  - address and port can be specified, defaults provided
Wizard dialog 5: Summary
  - All entered details are listed (tree-list component?)
  - User can navigate back, cancel or submit

High-priority follow-ups:
  - User can select multiple existing disks and/or create multiple new ones
  - "Networks" wizard dialog plus PXE boot
  - "submit and run" functionality
  - "Edit VM"
  - cdrom iso from network source (URL)

Later on, new wizard dialogs can be added or existing ones extended.

So far I considered but rejected these other concepts:
  - single complex dialog (no wizard, sort of "functionality grouping" would be still required)
  - "Edit" functionality mixed with the recent presentation components (nightmare for more complex configuration)

I'm looking for feedback - e.g. UX, extensibility, scope or whatever to be taken for consideration.



Marek Libra

senior software engineer

Red Hat Czech