def node_info(clusterid, nodeid=None, format='table'): if nodeid: url = Comet.url("cluster/{}/compute/{}/".format(clusterid, nodeid)) else: url = Comet.url("cluster/{}/frontend/".format(clusterid)) r = Comet.get(url) return Printer.attribute( r, #order=Cluster.NODEINFO_ORDER, output=format)
def node_info(clusterid, nodeid=None, format='table'): if nodeid: url = Comet.url("cluster/{}/compute/{}/" .format(clusterid, nodeid)) else: url = Comet.url("cluster/{}/frontend/" .format(clusterid)) r = Comet.get(url) return Printer.attribute(r, #order=Cluster.NODEINFO_ORDER, output=format)
def node_info(clusterid, nodeid=None, format='table'): if nodeid: url = Comet.url("cluster/{}/compute/{}/" .format(clusterid, nodeid)) else: url = Comet.url("cluster/{}/frontend/" .format(clusterid)) r = Comet.get(url) ret = "ERROR: Node not available. Please check the cluster/node name!\n" if r: ret = Printer.attribute(r, #order=Cluster.NODEINFO_ORDER, output=format) return ret
def simple_list(id=None, format="table"): result = "" if id is None: r = Comet.get(Comet.url("cluster/")) else: r = Comet.get(Comet.url("cluster/" + id + "/")) if r is None: Console.error("Could not find cluster `{}`".format(id)) return result r = [r] if r is not None: if 'error' in r: Console.error("An error occurred: {error}".format(**r)) raise ValueError("COMET Error") elif 'error' in r[0]: Console.error("An error occurred: {error}".format(**r[0])) raise ValueError("COMET Error") if format == "rest": result = r else: elements = {} for cluster in r: element = {} for attribute in ["project", "name", "description"]: element[attribute] = cluster[attribute] element["nodes"] = len(cluster["computes"]) for attribute in cluster["frontend"]: element["frontend " + attribute] = cluster["frontend"][attribute] names = [] for compute in cluster["computes"]: names.append(compute["name"]) element["computes"] = hostlist.collect_hostlist(names) elements[cluster["name"]] = element result = Printer.write(elements, order=[ "name", "project", "nodes", "computes", "frontend name", "frontend state", "frontend type", "description", ], header=[ "Name", "Project", "Count", "Nodes", "Frontend (Fe)", "State (Fe)", "Type (Fe)", "Description", ], output=format) return result
def list(id=None, format="table", sort=None): def check_for_error(r): if r is not None: if 'error' in r: Console.error("An error occurred: {error}".format(**r)) raise ValueError("COMET Error") result = "" if id is None: r = Comet.get(Comet.url("cluster/")) check_for_error(r) else: r = Comet.get(Comet.url("cluster/" + id + "/")) check_for_error(r) if r is None: Console.error("Could not find cluster `{}`".format(id)) return result r = [r] # # stuck state included in cluster data via API ''' stuck_computesets = {} computesets = Comet.get_computeset() if computesets: for computeset in computesets: if computeset["state"] in Cluster.STUCK_COMPUTESETS: cluster = computeset["cluster"] id = computeset["id"] nodes = computeset["computes"] if cluster not in stuck_computesets: stuck_computesets[cluster] = {} for node in nodes: stuck_computesets[cluster][node["name"]] = \ "{}({})".format(id, computeset["state"]) ''' # # getting account/allocation for each computeset # to display in the cluster view computeset_account = {} stuck_computesets = {} computesets = Comet.get_computeset() if computesets: for computeset in computesets: id = computeset["id"] account = computeset["account"] if id not in computeset_account: computeset_account[id] = account stuck_computesets = {} computesets = Comet.get_computeset() if computesets: for computeset in computesets: if computeset["state"] in Cluster.STUCK_COMPUTESETS: cluster = computeset["cluster"] id = computeset["id"] nodes = computeset["computes"] if cluster not in stuck_computesets: stuck_computesets[cluster] = {} for node in nodes: stuck_computesets[cluster][node["name"]] = \ "{}({})".format (id, computeset["state"]) if r is not None: if format == "rest": result = r else: result = '' data = [] empty = { 'cluster': None, 'cpus': None, 'host': None, "mac": None, 'ip': None, 'memory': None, 'disksize': None, 'name': None, 'state': None, 'type': None, 'active_computeset': None, 'kind': 'frontend', 'admin_state': None } for cluster in sorted(r, key=lambda x: x["name"]): clients = cluster["computes"] for client in clients: client["kind"] = "compute" frontend = dict(empty) frontend.update(cluster["frontend"]) pubip = cluster["frontend"]["pub_ip"] frontend["ip"] = pubip frontend["admin_state"] = cluster["frontend"][ "frontend_state"] result += "Cluster: %s\tFrontend: %s\tIP: %s\n" % \ (cluster["name"], cluster["frontend"]["name"], pubip) if len(clients) > 0: frontend['cluster'] = clients[0]['cluster'] else: frontend['cluster'] = frontend['name'] data += [frontend] data += clients for index, anode in enumerate(data): bnode = dict(anode) if "interface" in bnode: macs = [] # ips = [] for ipaddr in anode["interface"]: macs.append(ipaddr["mac"]) # ips.append(ipaddr["ip"] or "N/A") if format == 'table': bnode["mac"] = "\n".join(macs) else: bnode["mac"] = ";".join(macs) if "active_computeset_state" in anode and \ anode["active_computeset"] is not None and \ anode["active_computeset_state"] is not None: if anode["active_computeset_state"] != 'running': bnode["active_computeset"] = "%s(%s)" % \ (anode["active_computeset"], anode["active_computeset_state"]) else: if anode[ "active_computeset"] in computeset_account: bnode["allocation"] = \ computeset_account[anode["active_computeset"]] if "compute_state" in anode: bnode["admin_state"] = anode["compute_state"] #anode["ip"] = "; ".join(ips) if "ip" not in bnode: bnode["ip"] = None del bnode["interface"] # # stuck state included in cluster data via API ''' if bnode["cluster"] in stuck_computesets and \ bnode["name"] in stuck_computesets[bnode["cluster"]]: bnode["active_computeset"] = \ stuck_computesets[bnode["cluster"]][bnode["name"]] ''' data[index] = bnode sort_keys = ('cluster', 'mac') if sort: if sort in Cluster.CLUSTER_SORT_KEY: # print (sort) idx = Cluster.CLUSTER_SORT_KEY.index(sort) # print (idx) sortkey = Cluster.CLUSTER_ORDER[idx] # print (sortkey) sort_keys = (sortkey, ) # print (sort_keys) if "table" == format: result_print = Printer.write(data, order=Cluster.CLUSTER_ORDER, header=Cluster.CLUSTER_HEADER, output=format, sort_keys=sort_keys) result += str(result_print) else: result_print = Printer.write(data, order=Cluster.CLUSTER_ORDER, header=Cluster.CLUSTER_HEADER, output=format, sort_keys=sort_keys) result = result_print return result
def list(id=None, format="table"): def check_for_error(r): if r is not None: if 'error' in r: Console.error("An error occurred: {error}".format(**r)) raise ValueError("COMET Error") result = "" if id is None: r = Comet.get(Comet.url("cluster/")) check_for_error(r) else: r = Comet.get(Comet.url("cluster/" + id + "/")) check_for_error(r) if r is None: Console.error("Could not find cluster `{}`" .format(id)) return result r = [r] stuck_computesets = {} computesets = Comet.get_computeset() if computesets: for computeset in computesets: if computeset["state"] in Cluster.STUCK_COMPUTESETS: cluster = computeset["cluster"] id = computeset["id"] nodes = computeset["computes"] if cluster not in stuck_computesets: stuck_computesets[cluster] = {} for node in nodes: stuck_computesets[cluster][node["name"]] = \ "{}({})".format (id, computeset["state"]) if r is not None: if format == "rest": result = r else: data = [] empty = { 'cluster': None, 'cpus': None, 'host': None, "mac": None, 'ip': None, 'memory': None, 'disksize': None, 'name': None, 'state': None, 'type': None, 'computeset': None, 'kind': 'frontend' } for cluster in r: clients = cluster["computes"] for client in clients: client["kind"] = "compute" frontend = dict(empty) frontend.update(cluster["frontend"]) if len(clients) > 0: frontend['cluster'] = clients[0]['cluster'] else: frontend['cluster'] = frontend['name'] data += [frontend] data += clients for index, anode in enumerate(data): bnode = dict(anode) if "interface" in bnode: macs = [] #ips = [] for ipaddr in anode["interface"]: macs.append(ipaddr["mac"]) #ips.append(ipaddr["ip"] or "N/A") if format=='table': bnode["mac"] = "\n".join(macs) else: bnode["mac"] = ";".join(macs) #anode["ip"] = "; ".join(ips) del bnode["interface"] if bnode["cluster"] in stuck_computesets and \ bnode["name"] in stuck_computesets[bnode["cluster"]]: bnode["active_computeset"] = \ stuck_computesets[bnode["cluster"]][bnode["name"]] data[index] = bnode result = list_printer(data, order=[ "name", "state", "kind", "type", "mac", #"ip", "cpus", "cluster", "memory", "disksize", "active_computeset" ], header=[ "name", "state", "kind", "type", "mac", "cpus", "cluster", "RAM(M)", "disk(G)", "computeset" ], output=format, sort_keys=('cluster','mac')) return result
def list(id=None, format="table"): def check_for_error(r): if r is not None: if 'error' in r: Console.error("An error occurred: {error}".format(**r)) raise ValueError("COMET Error") result = "" if id is None: r = Comet.get(Comet.url("cluster/")) check_for_error(r) else: r = Comet.get(Comet.url("cluster/" + id + "/")) check_for_error(r) if r is None: Console.error("Could not find cluster `{}`" .format(id)) return result r = [r] if r is not None: if format == "rest": result = r else: data = [] empty = { 'cluster': None, 'cpus': None, 'host': None, "mac": None, 'ip': None, 'memory': None, 'name': None, 'state': None, 'type': None, 'kind': 'frontend' } for cluster in r: clients = cluster["computes"] for client in clients: client["kind"] = "compute" frontend = dict(empty) frontend.update(cluster["frontend"]) data += [frontend] data += clients for anode in data: for attribute in anode.keys(): if "interface" == attribute: macs = [] #ips = [] for ipaddr in anode["interface"]: macs.append(ipaddr["mac"]) #ips.append(ipaddr["ip"] or "N/A") anode["mac"] = "; ".join(macs) #anode["ip"] = "; ".join(ips) del anode["interface"] result = list_printer(data, order=[ "name", "state", "kind", "type", "mac", #"ip", "cpus", "cluster", "memory", ], output=format) return result
def simple_list(id=None, format="table"): result = "" if id is None: r = Comet.get(Comet.url("cluster/")) else: r = Comet.get(Comet.url("cluster/" + id + "/")) if r is None: Console.error("Could not find cluster `{}`" .format(id)) return result r = [r] if r is not None: if 'error' in r: Console.error("An error occurred: {error}".format(**r)) raise ValueError("COMET Error") elif 'error' in r[0]: Console.error("An error occurred: {error}".format(**r[0])) raise ValueError("COMET Error") if format == "rest": result = r else: elements = {} for cluster in r: element = {} for attribute in ["project", "name", "description"]: element[attribute] = cluster[attribute] element["nodes"] = len(cluster["computes"]) for attribute in cluster["frontend"].keys(): element["frontend " + attribute] = cluster["frontend"][ attribute] names = [] for compute in cluster["computes"]: names.append(compute["name"]) element["computes"] = hostlist.collect_hostlist(names) elements[cluster["name"]] = element result = dict_printer(elements, order=[ "name", "project", "nodes", "computes", "frontend name", "frontend state", "frontend type", "description", ], header=[ "Name", "Project", "Count", "Nodes", "Frontend (Fe)", "State (Fe)", "Type (Fe)", "Description", ], output=format) return result
def list(id=None, format="table", sort=None): def check_for_error(r): if r is not None: if 'error' in r: Console.error("An error occurred: {error}".format(**r)) raise ValueError("COMET Error") result = "" if id is None: r = Comet.get(Comet.url("cluster/")) check_for_error(r) else: r = Comet.get(Comet.url("cluster/" + id + "/")) check_for_error(r) if r is None: Console.error("Could not find cluster `{}`" .format(id)) return result r = [r] # # stuck state included in cluster data via API ''' stuck_computesets = {} computesets = Comet.get_computeset() if computesets: for computeset in computesets: if computeset["state"] in Cluster.STUCK_COMPUTESETS: cluster = computeset["cluster"] id = computeset["id"] nodes = computeset["computes"] if cluster not in stuck_computesets: stuck_computesets[cluster] = {} for node in nodes: stuck_computesets[cluster][node["name"]] = \ "{}({})".format(id, computeset["state"]) ''' # # getting account/allocation for each computeset # to display in the cluster view computeset_account = {} stuck_computesets = {} computesets = Comet.get_computeset() if computesets: for computeset in computesets: id = computeset["id"] account = computeset["account"] if id not in computeset_account: computeset_account[id] = account stuck_computesets = {} computesets = Comet.get_computeset() if computesets: for computeset in computesets: if computeset["state"] in Cluster.STUCK_COMPUTESETS: cluster = computeset["cluster"] id = computeset["id"] nodes = computeset["computes"] if cluster not in stuck_computesets: stuck_computesets[cluster] = {} for node in nodes: stuck_computesets[cluster][node["name"]] = \ "{}({})".format (id, computeset["state"]) if r is not None: if format == "rest": result = r else: result = '' data = [] empty = { 'cluster': None, 'cpus': None, 'host': None, "mac": None, 'ip': None, 'memory': None, 'disksize': None, 'name': None, 'state': None, 'type': None, 'active_computeset': None, 'kind': 'frontend', 'admin_state': None } for cluster in sorted(r, key=lambda x: x["name"]): clients = cluster["computes"] for client in clients: client["kind"] = "compute" frontend = dict(empty) frontend.update(cluster["frontend"]) pubip = cluster["frontend"]["pub_ip"] frontend["ip"] = pubip frontend["admin_state"] = cluster["frontend"]["frontend_state"] result += "Cluster: %s\tFrontend: %s\tIP: %s\n" % \ (cluster["name"], cluster["frontend"]["name"], pubip) if len(clients) > 0: frontend['cluster'] = clients[0]['cluster'] else: frontend['cluster'] = frontend['name'] data += [frontend] data += clients for index, anode in enumerate(data): bnode = dict(anode) if "interface" in bnode: macs = [] # ips = [] for ipaddr in anode["interface"]: macs.append(ipaddr["mac"]) # ips.append(ipaddr["ip"] or "N/A") if format == 'table': bnode["mac"] = "\n".join(macs) else: bnode["mac"] = ";".join(macs) if "active_computeset_state" in anode and \ anode["active_computeset"] is not None and \ anode["active_computeset_state"] is not None: if anode["active_computeset_state"] != 'running': bnode["active_computeset"] = "%s(%s)" % \ (anode["active_computeset"], anode["active_computeset_state"]) else: if anode["active_computeset"] in computeset_account: bnode["allocation"] = \ computeset_account[anode["active_computeset"]] if "compute_state" in anode: bnode["admin_state"] = anode["compute_state"] #anode["ip"] = "; ".join(ips) if "ip" not in bnode: bnode["ip"] = None del bnode["interface"] # # stuck state included in cluster data via API ''' if bnode["cluster"] in stuck_computesets and \ bnode["name"] in stuck_computesets[bnode["cluster"]]: bnode["active_computeset"] = \ stuck_computesets[bnode["cluster"]][bnode["name"]] ''' data[index] = bnode sort_keys = ('cluster','mac') if sort: if sort in Cluster.CLUSTER_SORT_KEY: # print (sort) idx = Cluster.CLUSTER_SORT_KEY.index(sort) # print (idx) sortkey = Cluster.CLUSTER_ORDER[idx] # print (sortkey) sort_keys = (sortkey,) # print (sort_keys) if "table" == format: result_print = Printer.write(data, order=Cluster.CLUSTER_ORDER, header=Cluster.CLUSTER_HEADER, output=format, sort_keys=sort_keys) result += str(result_print) else: result_print = Printer.write(data, order=Cluster.CLUSTER_ORDER, header=Cluster.CLUSTER_HEADER, output=format, sort_keys=sort_keys) result = result_print return result
def list(id=None, format="table", sort=None, view="FULL"): def check_for_error(r): if r is not None: if 'error' in r: Console.error("An error occurred: {error}".format(**r)) raise ValueError("COMET Error") result = "" if id is None: r = Comet.get(Comet.url("cluster/")) check_for_error(r) else: r = Comet.get(Comet.url("cluster/" + id + "/")) check_for_error(r) if r is None: Console.error("Error finding cluster `{}`" .format(id)) return result r = [r] # # getting account/allocation for each computeset # to display in the cluster view computeset_account = {} # stuck_computesets = {} computesets = Comet.get_computeset() # pprint (computesets) if computesets: computesets_submitted = Comet.get_computeset(state="submitted") if computesets_submitted: computesets += computesets_submitted computesets_ending = Comet.get_computeset(state="ending") if computesets_ending: computesets += computesets_ending for computeset in computesets: id = computeset["id"] account = computeset["account"] if id not in computeset_account: computeset_account[id] = account # no longer track and display the (possible) stuck # computeset in this way ''' stuck_computesets = {} computesets = Comet.get_computeset() if computesets: for computeset in computesets: if computeset["state"] in Cluster.STUCK_COMPUTESETS: cluster = computeset["cluster"] id = computeset["id"] nodes = computeset["computes"] if cluster not in stuck_computesets: stuck_computesets[cluster] = {} for node in nodes: stuck_computesets[cluster][node["name"]] = \ "{}({})".format (id, computeset["state"]) ''' if r is not None: if format == "rest": result = r else: result = '' data = [] empty = { 'cluster': None, 'cpus': None, 'host': None, "mac": None, 'ip': None, 'memory': None, 'disksize': None, 'name': None, 'state': None, 'type': None, 'active_computeset': None, 'kind': 'frontend', 'admin_state': None } for cluster in sorted(r, key=lambda x: x["name"]): clients = cluster["computes"] for client in clients: client["kind"] = "compute" frontend = dict(empty) frontend.update(cluster["frontend"]) pubip = cluster["frontend"]["pub_ip"] pubmac = cluster["frontend"]["pub_mac"] frontend["ip"] = pubip frontend["pub_mac"] = pubmac frontend["admin_state"] = cluster["frontend"]["frontend_state"] result += "Cluster: %s\tFrontend: %s\tIP: %s\n" % \ (cluster["name"], cluster["frontend"]["name"], pubip) if len(clients) > 0: frontend['cluster'] = clients[0]['cluster'] else: frontend['cluster'] = frontend['name'] data += [frontend] data += clients for index, anode in enumerate(data): bnode = dict(anode) pubmac = None if 'pub_mac' in bnode: pubmac = bnode["pub_mac"] if "interface" in bnode: macs = [] macs_pub_order = [] # ips = [] for ipaddr in anode["interface"]: macs.append(ipaddr["mac"]) # ips.append(ipaddr["ip"] or "N/A") if pubmac in macs: macs_pub_order.append(pubmac) for mac in macs: if mac != pubmac: macs_pub_order.append(mac) else: macs_pub_order = macs if format == 'table': bnode["mac"] = "\n".join(macs_pub_order) else: bnode["mac"] = ";".join(macs_pub_order) if "active_computeset_state" in anode and \ anode["active_computeset"] is not None and \ anode["active_computeset_state"] is not None: # if not running state, show also the status after # the computeset id if anode["active_computeset_state"] != 'running': bnode["active_computeset"] = "%s(%s)" % \ (anode["active_computeset"], anode["active_computeset_state"]) # if an active computeset has a valid account # associated with it, display the account/allocation # does this for computeset in all states if anode["active_computeset"] in computeset_account: bnode["allocation"] = \ computeset_account[anode["active_computeset"]] if "compute_state" in anode: bnode["admin_state"] = anode["compute_state"] #anode["ip"] = "; ".join(ips) if "ip" not in bnode: bnode["ip"] = None del bnode["interface"] # # stuck state included in cluster data via API ''' if bnode["cluster"] in stuck_computesets and \ bnode["name"] in stuck_computesets[bnode["cluster"]]: bnode["active_computeset"] = \ stuck_computesets[bnode["cluster"]][bnode["name"]] ''' data[index] = bnode sort_keys = ('cluster','mac') if sort: if sort in Cluster.CLUSTER_SORT_KEY: # print (sort) idx = Cluster.CLUSTER_SORT_KEY.index(sort) # print (idx) sortkey = Cluster.CLUSTER_ORDER[idx] # print (sortkey) sort_keys = (sortkey,) # print (sort_keys) if "table" == format: result_print = Printer.write(data, order=Cluster.CLUSTER_TABLE_VIEW[view]["order"], header=Cluster.CLUSTER_TABLE_VIEW[view]["header"], output=format, sort_keys=sort_keys) result += str(result_print) else: result_print = Printer.write(data, order=Cluster.CLUSTER_ORDER, header=Cluster.CLUSTER_HEADER, output=format, sort_keys=sort_keys) result = result_print return result