Upload the contribution of vstf as bottleneck network framework.
[bottlenecks.git] / vstf / vstf / agent / env / driver_plugins / manager.py
1 """
2 Created on 2015-9-15
3
4 @author: y00228926
5 """
6 import stevedore
7
8
9 class DriverPluginManager(object):
10     def __init__(self):
11         self.plugins = {}
12         self.mgr = stevedore.extension.ExtensionManager(namespace="drivers.plugins", invoke_on_load=True)
13
14     def load(self, drivers):
15         plugin = self.determine_driver_type(drivers)
16         ext = self.mgr[plugin]
17         ext.obj.load(drivers)
18         return True
19
20     def clean(self):
21         self.mgr.map(self._clean)
22         return True
23
24     def _clean(self, ext, *args, **kwargs):
25         ext.obj.clean()
26
27     def get_all_supported_drivers(self):
28         if not self.plugins:
29             for ext_name in self.mgr.names():
30                 ext = self.mgr[ext_name]
31                 self.plugins[ext_name] = ext.obj.get_supported_drivers()
32         return self.plugins
33
34     def determine_driver_type(self, drivers):
35         s = set(drivers)
36         for plugin, supported in self.get_all_supported_drivers().items():
37             if not (s - set(supported)):
38                 return plugin
39         else:
40             raise Exception('unspported drivers: %s' % drivers)