| # |
| # |
| |
| # Copyright (C) 2006, 2007, 2008 Google Inc. |
| # |
| # This program is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or |
| # (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, but |
| # WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # General Public License for more details. |
| # |
| # You should have received a copy of the GNU General Public License |
| # along with this program; if not, write to the Free Software |
| # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
| # 02110-1301, USA. |
| |
| |
| """Virtualization interface abstraction |
| |
| """ |
| |
| from ganeti import constants |
| from ganeti import errors |
| |
| 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 |
| |
| |
| _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. |
| |
| @type ht_kind: string |
| @param ht_kind: The requested hypervisor type |
| |
| """ |
| 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() |