3 # This script is used to manipulate the operational state of nodes in
4 # different node groups. These are basically set operations on nodes via the
7 # Take the ng name as an argument....
10 # * Set some or all in the set to rins.
11 # * get a list of nodes in the Alpha nodegroup.
13 # Given a nodelist, it could tag each one with a nodegroup name.
17 api = plc.getAuthAPI()
19 import parser as parsermodule
21 from nodequery import verify,query_to_dict,node_select
23 from nodecommon import *
28 fb = database.dbLoad("findbad")
30 parser = parsermodule.getParser(['nodesets'])
31 parser.set_defaults( list=True,
37 parser.add_option("", "--not", dest="notng", action="store_true",
38 help="All nodes NOT in nodegroup.")
39 parser.add_option("", "--nocolor", dest="nocolor", action="store_true",
41 parser.add_option("", "--list", dest="list", action="store_true",
42 help="List all nodes in the given nodegroup")
43 parser.add_option("", "--add", dest="add", action="store_true",
44 help="Add nodes to the given nodegroup")
45 parser.add_option("", "--delete", dest="delete", action="store_true",
46 help="Delete nodes from the given nodegroup")
48 parser = parsermodule.getParser(['defaults'], parser)
49 config = parsermodule.parse_args(parser)
51 # COLLECT nodegroups, nodes and node lists
52 if config.node or config.nodelist:
54 hostlist = [ config.node ]
56 hostlist = util.file.getListFromFile(config.nodelist)
58 # NOTE: preserve order given in file. Otherwise, return values are not in order
62 nodelist += api.GetNodes(h)
64 #nodelist = api.GetNodes(hostlist)
68 site = api.GetSites(config.site)
71 nodelist = api.GetNodes(site['node_ids'])
75 group_str = config.site
77 elif config.nodeselect:
78 hostlist = node_select(config.nodeselect)
79 nodelist = api.GetNodes(hostlist)
81 group_str = "selection"
84 ng = api.GetNodeGroups({'name' : config.nodegroup})
85 nodelist = api.GetNodes(ng[0]['node_ids'])
87 group_str = config.nodegroup
94 all_nodes = api.GetNodes({'peer_id': None})
96 # remove ngnodes from all node list
97 ng_list = [ x['hostname'] for x in ng_nodes ]
98 all_list = [ x['hostname'] for x in all_nodes ]
99 not_ng_nodes = Set(all_list) - Set(ng_list)
101 # keep each node that *is* in the not_ng_nodes set
102 nodelist = filter(lambda x : x['hostname'] in not_ng_nodes, all_nodes)
104 hostnames = [ n['hostname'] for n in nodelist ]
108 if config.add and config.nodegroup:
109 for node in hostnames:
110 print "Adding %s to %s nodegroup" % (node, config.nodegroup)
111 api.AddNodeToNodeGroup(node, config.nodegroup)
114 for node in hostnames:
115 print "Deleting %s from %s nodegroup" % (node, config.nodegroup)
116 api.DeleteNodeFromNodeGroup(node, config.nodegroup)
119 print " ---- Nodes in the %s Node Group ----" % group_str
120 print " Hostname plc obs pcu key kernel last_contact, last change, comon uptime"
122 for node in nodelist:
124 print nodegroup_display(node, fb, config)
128 print "no other options supported."
130 if __name__ == "__main__":