OpenFactoryCluster#
- class openfactory.OpenFactoryCluster[source]#
Bases:
objectOpenFactory Cluster Manager.
Allows to manage the OpenFactory cluster.
Important
User requires Docker access on all nodes of the OpenFactory cluster and ssh access to all nodes using the config.OPENFACTORY_USER.
- add_label(node_name, node_details)[source]#
Adds labels to a Docker node based on its IP address.
Looks for a node in the Docker Swarm cluster whose IP address matches the given node_details. If found, it updates the node’s labels by adding a ‘name’ label and merging any additional labels specified in node_details.
- Return type:
- Parameters:
node_name (str) – The name to assign as a label to the Docker node.
node_details (Dict) – Dictionary with required ‘ip’ and optional ‘labels’ keys.
Example
self.add_label("node-3", {"ip": "10.0.0.5", "labels": {"plant": "Plant-A", "role": "stream-apps"}})
- create_infrastack_from_config_file(stack_config_file)[source]#
Spins up an infrastructure stack based on the provided configuration file.
Reads a YAML configuration file that defines the infrastructure, including manager and worker nodes, and provisions them using Docker Swarm.
- create_managers(managers)[source]#
Creates Docker Swarm manager nodes from a given configuration.
For each manager node in the input dictionary, connects via SSH, checks swarm membership, joins as a manager if needed, applies labels, and reports success or failure.
- Return type:
- Parameters:
managers (Dict) – Dictionary with manager names as keys and values as dicts with required ‘ip’ and optional ‘labels’.
Example
managers = { "manager1": {"ip": "10.0.0.10", "labels": {"role": "primary"}}, "manager2": {"ip": "10.0.0.11"} } self.create_managers(managers)
- create_workers(workers)[source]#
Creates Docker Swarm worker nodes from a given configuration.
Connects via SSH to each worker node, checks swarm membership, joins if needed, and applies labels.
- Return type:
- Parameters:
workers (Dict) – Dictionary with worker names as keys and values as dicts with required ‘ip’ and optional ‘labels’.
Example
workers = { "worker1": {"ip": "10.0.0.20", "labels": {"role": "compute"}}, "worker2": {"ip": "10.0.0.21"} } self.create_workers(workers)
- remove_infrastack_from_config_file(stack_config_file)[source]#
Tears down an infrastructure stack based on a configuration file.
This function reads a YAML file describing the infrastructure stack, identifies existing nodes in the Docker Swarm cluster by their IPs, and removes the worker nodes accordingly.
- remove_workers(workers, node_ip_map)[source]#
Removes worker nodes from the Docker Swarm cluster.
Drains each worker node, connects remotely to remove it from the Swarm, and removes the node from the cluster manager.
- Return type:
- Parameters:
workers (Dict) – Dictionary with worker names as keys and values containing node details with required ‘ip’.
node_ip_map (Dict) – Mapping from node IP addresses to Docker node IDs.
Example
workers = { "worker1": {"ip": "10.0.0.20"}, "worker2": {"ip": "10.0.0.21"} } node_ip_map = { "10.0.0.20": "node_id_123", "10.0.0.21": "node_id_456" } self.remove_workers(workers, node_ip_map)