ebd3d3d7fbd4df556e85af1fbcd755fa0ea6ce0b
[bottlenecks.git] / vstf / vstf / agent / env / builder.py
1 """
2 Created on 2015-7-8
3
4 @author: y00228926
5 """
6 import logging
7
8 import stevedore
9
10 LOG = logging.getLogger(__name__)
11
12
13 class PluginManager(object):
14     def __init__(self):
15         self.instance = None
16         self.saved = {}
17
18     def build(self, cfg):
19         scheme = cfg["scheme"]
20         if scheme in self.saved:
21             # reuse old instance
22             self.instance = self.saved[scheme]
23         else:
24             mgr = stevedore.driver.DriverManager(namespace="env_build.plugins",
25                                                  name=scheme,
26                                                  invoke_on_load=False)
27             self.instance = mgr.driver()
28             self.saved[scheme] = self.instance
29
30         self.instance.clean()
31         return self.instance.build(cfg)
32
33     def clean(self):
34         if self.instance:
35             self.instance.clean()
36         self.instance = None
37
38
39 if __name__ == "__main__":
40     import argparse
41     from vstf.controller.env_build.env_build import IntentParser
42
43     parser = argparse.ArgumentParser()
44     parser.add_argument('--config', help='config file to parse')
45     args = parser.parse_args()
46     logging.basicConfig(level=logging.INFO)
47     parser = IntentParser(args.config)
48     cfg_intent = parser.parse_cfg_file()
49     for host_cfg in cfg_intent['env-build']:
50         tn = PluginManager()
51         tn.build(host_cfg)