summaryrefslogtreecommitdiffstats
path: root/engine/src/valet/bootstrapper.py
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/valet/bootstrapper.py')
-rw-r--r--engine/src/valet/bootstrapper.py121
1 files changed, 121 insertions, 0 deletions
diff --git a/engine/src/valet/bootstrapper.py b/engine/src/valet/bootstrapper.py
new file mode 100644
index 0000000..08bc41b
--- /dev/null
+++ b/engine/src/valet/bootstrapper.py
@@ -0,0 +1,121 @@
+#
+# -------------------------------------------------------------------------
+# Copyright (c) 2019 AT&T Intellectual Property
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# -------------------------------------------------------------------------
+#
+import glob
+import json
+import os
+import sys
+
+from valet.engine.app_manager.app_handler import AppHandler
+from valet.engine.db_connect.db_apis.music import Music
+from valet.engine.db_connect.db_handler import DBHandler
+from valet.engine.db_connect.locks import Locks
+from valet.engine.resource_manager.compute_manager import ComputeManager
+from valet.engine.resource_manager.metadata_manager import MetadataManager
+from valet.engine.resource_manager.naming import Naming
+from valet.engine.resource_manager.nova_compute import NovaCompute
+from valet.engine.resource_manager.resource_handler import ResourceHandler
+from valet.engine.resource_manager.topology_manager import TopologyManager
+from valet.engine.search.optimizer import Optimizer
+
+
+class Bootstrapper(object):
+ """Bootstrap valet-engine.
+
+ Instantiate and configure all valet-engine sub-systems.
+ """
+
+ def __init__(self, _config, _logger):
+ self.config = _config
+ self.logger = _logger
+
+ self.valet_id = None
+
+ self.dbh = None
+ self.ah = None
+ self.rh = None
+ self.compute = None
+ self.topology = None
+ self.metadata = None
+ self.optimizer = None
+
+ self.lock = None
+
+ def config_valet(self):
+ """Set all required modules and configure them."""
+
+ self.valet_id = self.config["engine"]["id"]
+
+ # Set DB connection.
+ db_config = self.config.get("db")
+ self.logger.info("launch engine -- keyspace: %s" % db_config.get("keyspace"))
+ db = Music(self.config, self.logger)
+
+ self.dbh = DBHandler(db, db_config, self.logger)
+
+ # Set lock to deal with datacenters in parallel.
+ self.lock = Locks(self.dbh, self.config["engine"]["timeout"])
+
+ # Set backend platform connection.
+ compute_config = self.config.get("compute")
+ compute_source = NovaCompute(self.config,
+ self.logger)
+
+ topology_config = self.config.get("topology")
+ topology_source = Naming(self.config.get("naming"), self.logger)
+
+ self.compute = ComputeManager(compute_source, self.logger)
+ self.topology = TopologyManager(topology_source, self.logger)
+ self.metadata = MetadataManager(compute_source, self.logger)
+
+ # Set resource handler.
+ self.rh = ResourceHandler("ResourceHandler",
+ self.dbh,
+ self.compute,
+ self.metadata,
+ self.topology,
+ compute_config,
+ self.logger)
+
+ dha = self.config["engine"]["dha"]
+ use_dha = True
+ if dha == "false" or not dha:
+ use_dha = False
+
+ # Set application handler.
+ self.ah = AppHandler(self.dbh, use_dha, self.logger)
+
+ # Set optimizer for placement decisions.
+ self.optimizer = Optimizer(self.logger)
+
+ # Read initial Valet Group rules and create in DB.
+ root = os.path.dirname(os.path.dirname(os.path.realpath(sys.argv[0])))
+ for rule_file in glob.glob(root + "/valet/rules/" + "*.json"):
+ rule = json.loads(open(rule_file).read())
+ self.dbh.create_group_rule(
+ rule["name"],
+ rule["app_scope"],
+ rule["type"],
+ rule["level"],
+ rule["members"],
+ rule["description"]
+ )
+
+ self.logger.debug("rule (" + rule["name"] + ") created")
+
+ return True