Source code for csle_common.util.cluster_util

import os
from csle_common.metastore.metastore_facade import MetastoreFacade
import csle_common.constants.constants as constants
from csle_common.dao.emulation_config.config import Config
from csle_common.logging.log import Logger
from csle_common.util.general_util import GeneralUtil


[docs]class ClusterUtil: """ Class with utility related to cluster management """
[docs] @staticmethod def am_i_leader(ip: str, config: Config) -> bool: """ Checks if a given IP is leader or not :param ip: the ip to check :param config: the cluster configuration :return: True if leader, False otherwise """ leader = False for node in config.cluster_config.cluster_nodes: if node.ip == ip: leader = node.leader return leader
[docs] @staticmethod def get_config() -> Config: """ Gets the current cluster config from the metastore or from disk depending on if it is the leader node or not :return: the cluster config """ config = MetastoreFacade.get_config(id=1) if config is None: config = Config.read_config_file() ip = GeneralUtil.get_host_ip() constants.METADATA_STORE.HOST = ip constants.CLUSTER_CONFIG.IP = ip leader = ClusterUtil.am_i_leader(ip=ip, config=config) constants.CLUSTER_CONFIG.LEADER = leader if leader: config = Config.read_config_file() current_config = MetastoreFacade.get_config(id=1) if current_config is None: MetastoreFacade.save_config(config) else: MetastoreFacade.update_config(config=config, id=1) return config
[docs] @staticmethod def set_config_parameters_from_config_file() -> None: """ Reads the config file from $CSLE_HOME/config.json and initializes certain config parameters :return: None """ if constants.CONFIG_FILE.CSLE_HOME_ENV_PARAM in os.environ: csle_home = os.environ[constants.CONFIG_FILE.CSLE_HOME_ENV_PARAM] else: raise Exception(f"The environment parameter {constants.CONFIG_FILE.CSLE_HOME_ENV_PARAM} is not set") config_file_path = f"{csle_home}{constants.COMMANDS.SLASH_DELIM}" \ f"{constants.CONFIG_FILE.CONFIG_FILE_NAME}" try: config = ClusterUtil.get_config() constants.CONFIG_FILE.PARSED_CONFIG = config constants.CSLE_ADMIN.MANAGEMENT_USER = config.management_admin_username_default constants.CSLE_ADMIN.MANAGEMENT_PW = config.management_admin_password_default constants.CSLE_ADMIN.MANAGEMENT_EMAIL = config.management_admin_email_default constants.CSLE_ADMIN.MANAGEMENT_ORGANIZATION = config.management_admin_organization_default constants.CSLE_ADMIN.MANAGEMENT_FIRST_NAME = config.management_admin_first_name_default constants.CSLE_ADMIN.MANAGEMENT_LAST_NAME = config.management_admin_last_name_default constants.CSLE_ADMIN.SSH_USER = config.ssh_admin_username constants.CSLE_ADMIN.SSH_PW = config.ssh_admin_password constants.CSLE_GUEST.MANAGEMENT_USER = config.management_guest_username_default constants.CSLE_GUEST.MANAGEMENT_PW = config.management_guest_password_default constants.CSLE_GUEST.MANAGEMENT_EMAIL = config.management_guest_email_default constants.CSLE_GUEST.MANAGEMENT_ORGANIZATION = config.management_guest_organization_default constants.CSLE_GUEST.MANAGEMENT_FIRST_NAME = config.management_guest_first_name_default constants.CSLE_GUEST.MANAGEMENT_LAST_NAME = config.management_guest_last_name_default constants.AGENT.USER = config.ssh_agent_username constants.AGENT.PW = config.ssh_agent_password constants.METADATA_STORE.USER = config.metastore_user constants.METADATA_STORE.PASSWORD = config.metastore_password constants.METADATA_STORE.DBNAME = config.metastore_database_name constants.COMMANDS.PGADMIN_USERNAME = config.pgadmin_username constants.COMMANDS.PGADMIN_PW = config.pgadmin_password constants.COMMANDS.GRAFANA_USERNAME = config.grafana_username constants.COMMANDS.GRAFANA_PW = config.grafana_password constants.COMMANDS.PGADMIN_PW = config.pgadmin_password constants.COMMANDS.NODE_EXPORTER_PORT = config.node_exporter_port constants.COMMANDS.GRAFANA_PORT = config.grafana_port constants.COMMANDS.MANAGEMENT_SYSTEM_PORT = config.management_system_port constants.COMMANDS.CADVISOR_PORT = config.cadvisor_port constants.COMMANDS.PGADMIN_PORT = config.pgadmin_port constants.COMMANDS.PROMETHEUS_PORT = config.prometheus_port constants.COMMANDS.NODE_EXPORTER_PID_FILE = config.node_exporter_pid_file constants.COMMANDS.CSLE_MGMT_WEBAPP_PID_FILE = config.csle_mgmt_webapp_pid_file constants.COMMANDS.NODE_EXPORTER_LOG_FILE = config.node_exporter_log_file constants.COMMANDS.DOCKER_STATS_MANAGER_OUTFILE = config.docker_stats_manager_outfile constants.COMMANDS.DOCKER_STATS_MANAGER_PIDFILE = config.docker_stats_manager_pidfile constants.COMMANDS.PROMETHEUS_PID_FILE = config.prometheus_pid_file constants.COMMANDS.PROMETHEUS_LOG_FILE = config.prometheus_log_file constants.COMMANDS.POSTGRESQL_LOG_DIR = config.postgresql_log_dir constants.COMMANDS.NGINX_LOG_DIR = config.nginx_log_dir constants.COMMANDS.FLASK_LOG_FILE = config.flask_log_file constants.LOGGING.DEFAULT_LOG_DIR = config.default_log_dir Logger.__call__().get_logger().info(f"Successfully initialized configuration " f"from configuration file: {config_file_path}") except Exception as e: Logger.__call__().get_logger().info(f"Failed to read configuration file from: {config_file_path}. " f"Exception: {str(e)}, {repr(e)}")