66 lines
1.8 KiB
Python

"""Module for interface of os installer.
.. moduleauthor::: Xiaodong Wang <xiaodongwang@huawei.com>
"""
import logging
from compass.config_management.installers import installer
from compass.utils import setting_wrapper as setting
class Installer(installer.Installer):
"""Interface for os installer."""
NAME = 'os_installer'
def get_oses(self):
"""virtual method to get supported oses.
:returns: list of str, each is the supported os version.
"""
return []
INSTALLERS = {}
def get_installer_by_name(name, package_installer):
"""Get os installer by name.
:param name: os installer name.
:type name: str
:param package_installer: package installer instance.
:returns: :instance of subclass of :class:`Installer`
:raises: KeyError
"""
if name not in INSTALLERS:
logging.error('os installer name %s is not in os installers %s',
name, INSTALLERS)
raise KeyError('os installer name %s is not in os INSTALLERS')
os_installer = INSTALLERS[name](package_installer)
logging.debug('got os installer %s', os_installer)
return os_installer
def register(os_installer):
"""Register os installer.
:param os_installer: subclass of :class:`Installer`
:raises: KeyError
"""
if os_installer.NAME in INSTALLERS:
logging.error(
'os installer %s is already registered in INSTALLERS %s',
os_installer, INSTALLERS)
raise KeyError(
'os installer %s is already registered' % os_installer)
logging.debug('register os installer %s', os_installer)
INSTALLERS[os_installer.NAME] = os_installer
def get_installer(package_installer):
"""Get default os installer from compass setting."""
return get_installer_by_name(setting.OS_INSTALLER, package_installer)