Source code for lighthouse.cluster

import logging

from .configurable import Configurable
from .balancer import Balancer


logger = logging.getLogger(__name__)


[docs]class Cluster(Configurable): """ The class representing a cluster of member nodes in a service. A simple class that merely keeps a list of nodes and defines which discovery method is used to track said nodes. """ config_subdirectory = "clusters" def __init__(self): self.discovery = None self.meta_cluster = None self.nodes = [] @classmethod
[docs] def validate_config(cls, config): """ Validates a config dictionary parsed from a cluster config file. Checks that a discovery method is defined and that at least one of the balancers in the config are installed and available. """ if "discovery" not in config: raise ValueError("No discovery method defined.") installed_balancers = Balancer.get_installed_classes().keys() if not any([balancer in config for balancer in installed_balancers]): raise ValueError("No available balancer configs defined.")
[docs] def apply_config(self, config): """ Sets the `discovery` and `meta_cluster` attributes, as well as the configured + available balancer attributes from a given validated config. """ self.discovery = config["discovery"] self.meta_cluster = config.get("meta_cluster") for balancer_name in Balancer.get_installed_classes().keys(): if balancer_name in config: setattr(self, balancer_name, config[balancer_name])