mknet/instrumented/deploy_minio.py

72 lines
2.2 KiB
Python
Raw Normal View History

2021-12-07 17:25:54 +00:00
#!/usr/bin/env python3
import json, yaml, os, sys, time, pathlib, socket, shutil
2021-12-06 10:53:22 +00:00
STORAGE_PATH = os.path.join(os.getcwd(), '.minio-testnet')
2021-12-07 16:29:16 +00:00
#STORAGE_PATH = os.path.join('/mnt/windows', '.minio-testnet')
2021-12-06 10:53:22 +00:00
MINIO_PATH = '/srv'
HOSTS_PATH = os.path.join(STORAGE_PATH, 'hosts.txt')
UNIX_SOCK = os.path.join(STORAGE_PATH, 'deploy.sock')
DATA_PATH = lambda nid: os.path.join(STORAGE_PATH, 'data'+str(nid))
def main():
if int(os.environ['ID']) == 1: leader()
else: follower()
def leader():
shutil.rmtree(STORAGE_PATH, ignore_errors=True)
os.makedirs(STORAGE_PATH)
os.makedirs(MINIO_PATH, exist_ok=True)
print(STORAGE_PATH)
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind(UNIX_SOCK)
sock.listen()
n_serv = n_servers()
fl = [ co for co, addr in [ sock.accept() for i in range(n_serv - 1) ]]
2021-12-07 17:25:54 +00:00
identities = [ json.loads(co.makefile().readline()) for co in fl ] + [ { "ip": os.environ['IP'], "path": make_data() } ]
print(f"ident: {identities}")
msg = f"{json.dumps(identities)}\n".encode()
[ co.send(msg) for co in fl ]
2021-12-06 10:53:22 +00:00
2021-12-07 17:25:54 +00:00
run_minio(identities)
2021-12-06 10:53:22 +00:00
def follower():
co = None
while True:
2021-12-07 17:25:54 +00:00
time.sleep(1)
2021-12-06 10:53:22 +00:00
try:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect(UNIX_SOCK)
co = sock.makefile()
break
except Exception as err:
print('conn failed, wait,', err)
2021-12-07 17:25:54 +00:00
my_identity = json.dumps({ "ip": os.environ['IP'], "path": make_data() })
sock.send(f"{my_identity}\n".encode())
identities = json.loads(co.readline())
2021-12-06 10:53:22 +00:00
2021-12-07 17:25:54 +00:00
run_minio(identities)
2021-12-06 10:53:22 +00:00
2021-12-07 17:25:54 +00:00
def make_data():
data_path = DATA_PATH(os.environ['ID'])
os.makedirs(data_path)
return data_path
2021-12-06 10:53:22 +00:00
2021-12-07 17:25:54 +00:00
def run_minio(identities):
2021-12-07 16:29:16 +00:00
cmd = f"minio server --console-address ':9001' --address [{os.environ['IP']}]:9000"
2021-12-07 17:25:54 +00:00
for ident in identities:
cmd += f" http://[{ident['ip']}]:9000{ident['path']}"
2021-12-07 16:29:16 +00:00
cmd += f" > {os.path.join(STORAGE_PATH, 'minio'+os.environ['ID']+'.log')} 2>&1"
2021-12-07 17:25:54 +00:00
print("launch: ", cmd)
2021-12-07 16:29:16 +00:00
os.system(cmd)
2021-12-06 10:53:22 +00:00
def n_servers():
with open('.current_state.yml', 'r') as f:
netw = yaml.safe_load(f)
n_servers = len(netw['servers'])
return n_servers
__name__ == '__main__' and main()