import os, json, time, re, sys, subprocess from clusterman.config import CONF import clusterman.utils as utils def ls(group=None): nodes=utils.get_node_list() if len(nodes)<=0: print("Please perform a scan before") exit(2) # Print nodes if group is not None: for node in utils.get_node_in_group(group): print(node) else: 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=dict() 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 print("Contacting {}...".format(ip),end='') if not utils.ping_test(ip): nodes[ip]={"hostname":""} 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=utils.get_node_list() if len(nodes) <= 0: print("Please perform a scan before") exit(0) # Perform ping check fail=False for ip in nodes: print("Contacting {}...".format(ip),end='') if not utils.ping_test(ip,timeout): 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") def exec(command, group=None, use_key=False): nodes=utils.get_node_list() if group is None else utils.get_node_in_group(group) for ip in nodes: print("----- Node {} -----".format(ip)) print(utils.ssh_exec(ip," ".join(command),use_key))