Upload the contribution of vstf as bottleneck network framework.
[bottlenecks.git] / vstf / vstf / agent / env / builder.py
diff --git a/vstf/vstf/agent/env/builder.py b/vstf/vstf/agent/env/builder.py
new file mode 100755 (executable)
index 0000000..ebd3d3d
--- /dev/null
@@ -0,0 +1,51 @@
+"""
+Created on 2015-7-8
+
+@author: y00228926
+"""
+import logging
+
+import stevedore
+
+LOG = logging.getLogger(__name__)
+
+
+class PluginManager(object):
+    def __init__(self):
+        self.instance = None
+        self.saved = {}
+
+    def build(self, cfg):
+        scheme = cfg["scheme"]
+        if scheme in self.saved:
+            # reuse old instance
+            self.instance = self.saved[scheme]
+        else:
+            mgr = stevedore.driver.DriverManager(namespace="env_build.plugins",
+                                                 name=scheme,
+                                                 invoke_on_load=False)
+            self.instance = mgr.driver()
+            self.saved[scheme] = self.instance
+
+        self.instance.clean()
+        return self.instance.build(cfg)
+
+    def clean(self):
+        if self.instance:
+            self.instance.clean()
+        self.instance = None
+
+
+if __name__ == "__main__":
+    import argparse
+    from vstf.controller.env_build.env_build import IntentParser
+
+    parser = argparse.ArgumentParser()
+    parser.add_argument('--config', help='config file to parse')
+    args = parser.parse_args()
+    logging.basicConfig(level=logging.INFO)
+    parser = IntentParser(args.config)
+    cfg_intent = parser.parse_cfg_file()
+    for host_cfg in cfg_intent['env-build']:
+        tn = PluginManager()
+        tn.build(host_cfg)