diff options
Diffstat (limited to 'engine/src/valet/bootstrapper.py')
-rw-r--r-- | engine/src/valet/bootstrapper.py | 121 |
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 |