From d0419e709d3a745631800d579ce209eb697a7782 Mon Sep 17 00:00:00 2001 From: Ting-Jun Wang Date: Thu, 30 May 2024 15:20:19 +0800 Subject: [PATCH] fix: docker swarm (master) --- src/communication.py | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/communication.py b/src/communication.py index 85380ed..4d3e9ad 100644 --- a/src/communication.py +++ b/src/communication.py @@ -1,6 +1,7 @@ import socket import json import docker +import time class ClusterCommunicationModule(): def __init__(self, host, port, node_manager): @@ -40,6 +41,15 @@ class ClusterCommunicationModule(): if not cont: break elif data == '[CHECK]': # master side + # build docker swarm + self.node_manager.docker_client.swarm.init(advertise_addr=self.host, listen_addr=f"{self.host}:2377", force_new_cluster=True) + + # send docker swarm token to the worker + token = self.node_manager.docker_client.swarm.attrs['JoinTokens']['Worker'] + conn.send(f'[DOCKER_TOKEN] {token}'.encode()) + print(f"Send token: {token} to the worker.") + time.sleep(3) + self.worker_conns.append(conn) continue @@ -81,26 +91,18 @@ class ClusterCommunicationModule(): data = self.client_sock.recv(1024) data = data.decode() - if data == '[REJECT]': - print(f"{host} reject.") - status = False - elif data == '[ACCEPT]': - self.node_manager.status = 'master' - print(f"{host} accept.") - - # build docker swarm - self.node_manager.docker_client.init(advertise_addr="eth0", listen_addr=f"{self.host}:2377", force_new_cluster=True) - token = self.node_manager.docker_client.attrs['JoinTokens']['Worker'] - self.client_sock.send(f'[DOCKER_TOKEN] {token}'.encode()) - - status = True - # close client_sock, and waiting for the worker connect to our self.sock self.client_sock.close() self.client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - - return status + if data == '[REJECT]': + print(f"{host} reject.") + return False + elif data == '[ACCEPT]': + self.node_manager.status = 'master' + print(f"{host} accept.") + return True + def cluster_info(self): ans = []