Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

This is an early draft

Bug Reference

None

Branch

Work in progress patches are here:

https://github.com/djs55/cloudstack/tree/virsh-capabilities

Introduction

Some people prefer to manage their hypervisors entirely via the libvirt control plane. At the moment these people are forced to choose the KVM hypervisor, even though libvirt also supports the Xen hypervisor. This design extends CloudStack to support management of hosts running Xen via libvirt as well as KVM. No change will be made to the XenServer plugin.

Bug Reference

None

Branch

Work in progress (ugly) patches are here:

https://github.com/djs55/cloudstack/tree/virsh-capabilities

Principles

  1. Maximise code shared between KVM and Xen. Corollary: minimise the number of Xen-specific workarounds
    1. We want people to be able to add features to the libvirt plugin without having to write unnecessary special-cases for Xen or KVM.
    2. If a libvirt hypervisor driver lacks a useful feature, we should implement it.
    3. Share the same system VM template as KVM

...

  • this section is intentionally left blank

Document History

  • 2014-06-08: initial draft

Glossary

Feature Specifications

...

A cloud admin wishes to manage hosts with the libvirt control-plance plane (e.g. virt-manager, virsh etc) using the Xen hypervisor. The admin installs Xen and libvirt via their favourite Linux distribution. The admin logs into the CloudStack UI and creates a cluster with hypervisor type "XEN". The admin then adds a host to the cluster. A user is requests an instance and a VM is spawned on the Xen host via libvirt.

...

On using the host <-> guest private <channel> for configuration: this mechanism is used by KVM today and is a sensible design choice and a real missing feature in the libvirt libxl driver. Therefore we should implement the missing feature.

On extending the HypervisorType enum: this is a bit ugly because conceptually we should really have a single "libvirt" type with 2 subtypes for "Xen" and "KVM". All the code which currently says "if kvm`' needs to become "if kvm || xen".

On detecting hypervisors on the host: it would be better to always use /sys/hypervisor/type, but this doesn't appear to be populated by the KVM module.

  • discussion of alternatives amongst design ideas, their resources/time tradeoffs and limitations. Explain why a certain design idea is chosen over others
  • highlight architectural patterns being used (queues, async/sync, state machines, etc)
  • talk about main algorithms used
  • explain what components are being changed and what the dependent components are
  • regarding database: talk about tables being added/modified
  • performance implications: what are the improvements or risks introduced to capacity, response time, resources usage and other relevant KPIs
  • preferably show class diagrams, sequence diagrams and state diagrams
  • if possible, publish signatures of all methods classes and interfaces implement, and the explain the object information of different classes

Web Services APIs

list changes to existing web services APIs and new APIs introduced with signatures and throughout documentation

UI flow

  • either demonstrate it visually here or link to relevant mockups

IP Clearance

  • what dependencies will you be adding to the project?
  • are you expecting to include any code developed outside the Apache CloudStack project?

Appendix

Appendix A:

Another option is to query "virsh capabilities" but this requires the libvirt daemon to be already started, which is not required today.

Web Services APIs

No new APIs are needed

UI flow

No change to the UI flow is needed

IP Clearance

No new dependencies need to be added to CloudStackAppendix B: