import os, json, time from clusterman.config import CONF def ls(): nodes_path=CONF.NODE_FILE nodes=None if os.path.exists(nodes_path): with open(nodes_path) as f: nodes=json.load(f) else: print("Please perform a scan before") exit(0) for node in nodes: print(node) def scan(timeout): 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): for X in range(from_split[1],to_split[1]+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(ip) print("=> Found!!") else: print("") with open(CONF.NODE_FILE, "w") as f: f.write(json.dumps(nodes,indent=4)) CONF["cache"]["last_scan"]=int(time.time()) CONF.save() def check(timeout): nodes_path=CONF.NODE_FILE nodes=None if os.path.exists(nodes_path): with open(nodes_path) as f: nodes=json.load(f) else: print("Please perform a scan before") exit(0) 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("Success: All nodes are reachable") else: print("Error: Some of your nodes are not reachable")