diff options
Diffstat (limited to 'vstf/vstf/agent/env/driver_plugins')
-rwxr-xr-x | vstf/vstf/agent/env/driver_plugins/__init__.py | 0 | ||||
-rwxr-xr-x | vstf/vstf/agent/env/driver_plugins/manager.py | 40 | ||||
-rwxr-xr-x | vstf/vstf/agent/env/driver_plugins/model.py | 38 | ||||
-rwxr-xr-x | vstf/vstf/agent/env/driver_plugins/origin_driver.py | 46 |
4 files changed, 124 insertions, 0 deletions
diff --git a/vstf/vstf/agent/env/driver_plugins/__init__.py b/vstf/vstf/agent/env/driver_plugins/__init__.py new file mode 100755 index 00000000..e69de29b --- /dev/null +++ b/vstf/vstf/agent/env/driver_plugins/__init__.py diff --git a/vstf/vstf/agent/env/driver_plugins/manager.py b/vstf/vstf/agent/env/driver_plugins/manager.py new file mode 100755 index 00000000..3bb3fadd --- /dev/null +++ b/vstf/vstf/agent/env/driver_plugins/manager.py @@ -0,0 +1,40 @@ +""" +Created on 2015-9-15 + +@author: y00228926 +""" +import stevedore + + +class DriverPluginManager(object): + def __init__(self): + self.plugins = {} + self.mgr = stevedore.extension.ExtensionManager(namespace="drivers.plugins", invoke_on_load=True) + + def load(self, drivers): + plugin = self.determine_driver_type(drivers) + ext = self.mgr[plugin] + ext.obj.load(drivers) + return True + + def clean(self): + self.mgr.map(self._clean) + return True + + def _clean(self, ext, *args, **kwargs): + ext.obj.clean() + + def get_all_supported_drivers(self): + if not self.plugins: + for ext_name in self.mgr.names(): + ext = self.mgr[ext_name] + self.plugins[ext_name] = ext.obj.get_supported_drivers() + return self.plugins + + def determine_driver_type(self, drivers): + s = set(drivers) + for plugin, supported in self.get_all_supported_drivers().items(): + if not (s - set(supported)): + return plugin + else: + raise Exception('unspported drivers: %s' % drivers) diff --git a/vstf/vstf/agent/env/driver_plugins/model.py b/vstf/vstf/agent/env/driver_plugins/model.py new file mode 100755 index 00000000..3a0b1845 --- /dev/null +++ b/vstf/vstf/agent/env/driver_plugins/model.py @@ -0,0 +1,38 @@ +""" +Created on 2015-9-15 + +@author: y00228926 +""" +from abc import ABCMeta +from abc import abstractmethod + + +class DriverPlugin: + __metaclass__ = ABCMeta + + @abstractmethod + def __init__(self): + """don't pass in any args for __init__. + """ + + @abstractmethod + def clean(self): + """implement this clean function to clean environment before and after calling any other functions. + + """ + pass + + @abstractmethod + def load(self, drivers): + """load driver modules. + + :param list drivers:list of modules to be inserted. for example:[ixgbe,vhost_net] + + """ + pass + + @abstractmethod + def get_supported_drivers(self): + """return a list of supported driver modules. + """ + pass diff --git a/vstf/vstf/agent/env/driver_plugins/origin_driver.py b/vstf/vstf/agent/env/driver_plugins/origin_driver.py new file mode 100755 index 00000000..850d7851 --- /dev/null +++ b/vstf/vstf/agent/env/driver_plugins/origin_driver.py @@ -0,0 +1,46 @@ +""" +Created on 2015-10-12 + +@author: y00228926 +""" +from vstf.agent.env.driver_plugins import model +from vstf.common.utils import check_and_rmmod, check_call + + +class OriginDriverPlugin(model.DriverPlugin): + """ + implement for operating linux origin driver modules. + """ + + def __init__(self): + """ + list all origin drivers in self.origin_drivers + """ + self.origin_drivers = ['ixgbe', 'bnx2x', 'i40e', 'be2net', 'vhost_net'] + + def clean(self): + """clean drivers list in self.origin_drivers. + + """ + for mod in self.origin_drivers: + check_and_rmmod(mod) + + check_and_rmmod('tun') + return True + + def load(self, drivers): + """insmod drivers + + :param list drivers:list of drivers link ['ixgbe','vhost_net'] + """ + # load implicit 'tun' module dependency for vhost_net + if 'vhost_net' in drivers: + check_call("modprobe tun", shell=True) + + for drv in drivers: + check_call("modprobe %s" % drv, shell=True) + + return True + + def get_supported_drivers(self): + return self.origin_drivers |