From b2835c72a33fd1baa20fa137cf4c1953ca28e149 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Thu, 26 Oct 2023 12:36:51 +0200 Subject: [PATCH] Minor changes --- clusterman/__main__.py | 3 ++- clusterman/commands/node.py | 37 ++++++++++++++++++++++++++++++++----- clusterman/config.py | 5 +++++ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/clusterman/__main__.py b/clusterman/__main__.py index 706a288..8f3c416 100644 --- a/clusterman/__main__.py +++ b/clusterman/__main__.py @@ -18,7 +18,8 @@ def main(): # Run the proper handler if args.command == "node": print("Do node related stuff") - node.scan("10.0.0.1","10.0.0.10") + #node.scan("10.0.0.1","10.0.0.10") + node.check() if args.command == "frontend": print("Do frontend related stuff") diff --git a/clusterman/commands/node.py b/clusterman/commands/node.py index bd7c443..04ede32 100644 --- a/clusterman/commands/node.py +++ b/clusterman/commands/node.py @@ -1,5 +1,5 @@ -import os - +import os, json +from clusterman.config import CONF def ls(): @@ -7,8 +7,9 @@ def ls(): def scan(ip4_from,ip4_to,timeout=0.1): - from_split=[int(n) for n in ip4_from.split(".")] - to_split=[int(n) for n in ip4_to.split(".")] + from_split=[int(n) for n in CONF["cluster"]["ip4_from"].split(".")] + to_split=[int(n) for n in CONF["cluster"]["ip4_to"].split(".")] + ignore_list=[ip.strip(" ") for ip in CONF["cluster"]["ip4_ignore"]] nodes=list() print("----- Starting node scan (timeout={}s) -----".format(timeout)) for W in range(from_split[0],to_split[0]+1): @@ -16,11 +17,37 @@ def scan(ip4_from,ip4_to,timeout=0.1): for Y in range(from_split[2],to_split[2]+1): for Z in range(from_split[3],to_split[3]+1): ip="{}.{}.{}.{}".format(W,X,Y,Z) + if ip in ignore_list: + print("Skipping {}".format(ip)) + continue response = os.system("ping -c 1 -W " + str(timeout)+ " " + ip + " &>/dev/null") print("Contacting {}...".format(ip),end='') if response==0: - nodes.append() + nodes.append(ip) print("=> Found!!") else: print("") + with open(CONF["paths"]["nodes"], "w") as f: + f.write(json.dumps(nodes)) +def check(timeout=0.1): + nodes_path=CONF["paths"]["nodes"] + nodes=None + if os.path.exists(nodes_path): + with open(nodes_path) as f: + nodes=json.load(f) + if not nodes == None: + fail=False + for ip in nodes: + print("Contacting {}...".format(ip),end='') + response = os.system("ping -c 1 -W " + str(timeout)+ " " + ip + " &>/dev/null") + if response == 0: + print("") + else: + fail=True + print("=> Not responding!!") + + if not fail: + print("Succeed: All nodes are reachable") + else: + print("Error: Some of your nodes are not reachable") diff --git a/clusterman/config.py b/clusterman/config.py index fefd753..72a8b2b 100644 --- a/clusterman/config.py +++ b/clusterman/config.py @@ -8,6 +8,11 @@ class Config: DEFAULT_CONFIG = { "paths": { "nodes": os.path.join(CONF_DIR,"nodeslist.json") + }, + "cluster": { + "ip4_from": "10.128.0.133", + "ip4_to": "10.128.0.140", + "ip4_ignore": ["10.0.0.5", "10.0.0.1"] } }