X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/65a6f9b7bf490d761d4631c5d6ddeb1c1260a921..97b40f39d75679418c8f6739331ffefeff1f3ce0:/lib/hypervisor/__init__.py diff --git a/lib/hypervisor/__init__.py b/lib/hypervisor/__init__.py index 639d0cf..e1b39ba 100644 --- a/lib/hypervisor/__init__.py +++ b/lib/hypervisor/__init__.py @@ -23,28 +23,53 @@ """ -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()