"""
-from ganeti import ssconf
from ganeti import constants
from ganeti import errors
-from ganeti.hypervisor import FakeHypervisor
-from ganeti.hypervisor import XenHypervisor
+from ganeti.hypervisor import hv_fake
+from ganeti.hypervisor import hv_xen
+from ganeti.hypervisor import hv_kvm
+from ganeti.hypervisor import hv_chroot
+from ganeti.hypervisor import hv_lxc
-def GetHypervisor():
- """Return a Hypervisor instance.
+_HYPERVISOR_MAP = {
+ constants.HT_XEN_PVM: hv_xen.XenPvmHypervisor,
+ constants.HT_XEN_HVM: hv_xen.XenHvmHypervisor,
+ constants.HT_FAKE: hv_fake.FakeHypervisor,
+ constants.HT_KVM: hv_kvm.KVMHypervisor,
+ constants.HT_CHROOT: hv_chroot.ChrootManager,
+ constants.HT_LXC: hv_lxc.LXCHypervisor,
+ }
+
+
+def GetHypervisorClass(ht_kind):
+ """Return a Hypervisor class.
+
+ This function returns the hypervisor class corresponding to the
+ given hypervisor name.
- This function parses the cluster hypervisor configuration file and
- instantiates a class based on the value of this file.
+ @type ht_kind: string
+ @param ht_kind: The requested hypervisor type
"""
- ht_kind = ssconf.SimpleStore().GetHypervisorType()
- if ht_kind == constants.HT_XEN_PVM30:
- cls = XenHypervisor.XenPvmHypervisor
- elif ht_kind == constants.HT_XEN_HVM31:
- cls = XenHypervisor.XenHvmHypervisor
- elif ht_kind == constants.HT_FAKE:
- cls = FakeHypervisor.FakeHypervisor
- else:
+ if ht_kind not in _HYPERVISOR_MAP:
raise errors.HypervisorError("Unknown hypervisor type '%s'" % ht_kind)
+
+ cls = _HYPERVISOR_MAP[ht_kind]
+ return cls
+
+
+def GetHypervisor(ht_kind):
+ """Return a Hypervisor instance.
+
+ This is a wrapper over L{GetHypervisorClass} which returns an
+ instance of the class.
+
+ @type ht_kind: string
+ @param ht_kind: The requested hypervisor type
+
+ """
+ cls = GetHypervisorClass(ht_kind)
+
return cls()