fix: docker swarm (master)

This commit is contained in:
Ting-Jun Wang 2024-05-30 15:20:19 +08:00
parent 24d26c8635
commit d0419e709d
Signed by: snsd0805
GPG Key ID: 48D331A3D6160354

View File

@ -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 = []