X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=nodegroups.py;h=dee3cec6a9b1b3a7778a56d6e56b024b182b684f;hb=0ef4db5de579402bb5e43fb118f25ebe9bb66961;hp=20f1513cb9ee4fbcd243bc1aceb2bbeb62991f96;hpb=77f84f1e8242cdc45eb091ab65eef940a23493a6;p=monitor.git diff --git a/nodegroups.py b/nodegroups.py index 20f1513..dee3cec 100755 --- a/nodegroups.py +++ b/nodegroups.py @@ -13,41 +13,29 @@ # Given a nodelist, it could tag each one with a nodegroup name. # * -import plc -import auth -api = plc.PLC(auth.auth, auth.plc) +from monitor import database +from monitor.database.info.model import FindbadNodeRecord +from monitor import util +from monitor.wrapper import plc +from monitor import parser as parsermodule -from optparse import OptionParser -from sets import Set -from nodequery import verify,query_to_dict,node_select +api = plc.getAuthAPI() -from nodecommon import * -import soltesz +from monitor.query import verify,query_to_dict,node_select +from monitor.common import * +from sets import Set def main(): - from config import config - fb = soltesz.dbLoad("findbad") - - parser = OptionParser() - parser.set_defaults(nodegroup="Alpha", - node=None, - nodelist=None, - list=True, + + parser = parsermodule.getParser(['nodesets']) + parser.set_defaults( list=True, add=False, nocolor=False, notng=False, - delete=False, - nodeselect=None, - ) + delete=False,) + parser.add_option("", "--not", dest="notng", action="store_true", help="All nodes NOT in nodegroup.") - parser.add_option("", "--nodegroup", dest="nodegroup", metavar="NodegroupName", - help="Specify a nodegroup to perform actions on") - parser.add_option("", "--nodeselect", dest="nodeselect", metavar="querystring", - help="Specify a query to perform on findbad db") - parser.add_option("", "--site", dest="site", metavar="site name", - help="Specify a site to view node status") - parser.add_option("", "--nocolor", dest="nocolor", action="store_true", help="Enable color") parser.add_option("", "--list", dest="list", action="store_true", @@ -56,34 +44,30 @@ def main(): help="Add nodes to the given nodegroup") parser.add_option("", "--delete", dest="delete", action="store_true", help="Delete nodes from the given nodegroup") - parser.add_option("", "--node", dest="node", metavar="nodename.edu", - help="A single node name to add to the nodegroup") - parser.add_option("", "--nodelist", dest="nodelist", metavar="list.txt", - help="Use all nodes in the given file for operation.") - config = config(parser) - config.parse_args() + + parser = parsermodule.getParser(['defaults'], parser) + config = parsermodule.parse_args(parser) # COLLECT nodegroups, nodes and node lists if config.node or config.nodelist: if config.node: hostlist = [ config.node ] else: - hostlist = config.getListFromFile(config.nodelist) + hostlist = util.file.getListFromFile(config.nodelist) # NOTE: preserve order given in file. Otherwise, return values are not in order # given to GetNodes nodelist = [] for h in hostlist: - nodelist += api.GetNodes(h) + nodelist.append( plccache.GetNodeByName(h) ) - #nodelist = api.GetNodes(hostlist) group_str = "Given" elif config.site: - site = api.GetSites(config.site) + site = plccache.GetSitesByName([config.site]) if len (site) > 0: site = site[0] - nodelist = api.GetNodes(site['node_ids']) + nodelist = plccache.GetNodesByIds(site['node_ids']) else: nodelist = [] @@ -91,13 +75,13 @@ def main(): elif config.nodeselect: hostlist = node_select(config.nodeselect) - nodelist = api.GetNodes(hostlist) + nodelist = [ plccache.GetNodeByName(h) for h in hostlist ] group_str = "selection" else: ng = api.GetNodeGroups({'name' : config.nodegroup}) - nodelist = api.GetNodes(ng[0]['node_ids']) + nodelist = plccache.GetNodesByIds(ng[0]['node_ids']) group_str = config.nodegroup @@ -106,7 +90,7 @@ def main(): ng_nodes = nodelist # Get all nodes - all_nodes = api.GetNodes({'peer_id': None}) + all_nodes = plccache.l_nodes # remove ngnodes from all node list ng_list = [ x['hostname'] for x in ng_nodes ] @@ -119,15 +103,8 @@ def main(): hostnames = [ n['hostname'] for n in nodelist ] # commands: - if config.list: - print " ---- Nodes in the %s Node Group ----" % group_str - i = 1 - for node in nodelist: - print "%-2d" % i, - print nodegroup_display(node, fb, config) - i += 1 - elif config.add and config.nodegroup: + if config.add and config.nodegroup: for node in hostnames: print "Adding %s to %s nodegroup" % (node, config.nodegroup) api.AddNodeToNodeGroup(node, config.nodegroup) @@ -137,6 +114,17 @@ def main(): print "Deleting %s from %s nodegroup" % (node, config.nodegroup) api.DeleteNodeFromNodeGroup(node, config.nodegroup) + elif config.list: + print " ---- Nodes in the %s Node Group ----" % group_str + print " Hostname plc obs pcu key kernel last_contact, last change, comon uptime" + i = 1 + for node in nodelist: + print "%-2d" % i, + fbrec = FindbadNodeRecord.get_latest_by(hostname=node['hostname']) + fbdata = fbrec.to_dict() + print nodegroup_display(node, fbdata, config) + i += 1 + else: print "no other options supported."