#!/usr/sfw/bin/python import sys, os, re, time class ClusterList: # A list of clusters __cluster_list = [] def getCluster(self, clustername): for _cluster in self.__cluster_list: if _cluster.abbr == clustername: return _cluster return None def addCluster(self, cluster): if self.getCluster(cluster.abbr) == None: self.__cluster_list = self.__cluster_list + [cluster] def printList(self): for _cluster in self.__cluster_list: print "%s (%s) [%s - %d members]" % (_cluster.abbr, _cluster.name, _cluster.clustertype, _cluster.membercount) print " -- %s" % (_cluster.desc) print class Cluster: # A cluster itself __cluster_member_list = [] abbr = "" name = "" desc = "" version = "" vendor = "" clustertype = 'CLUSTER' membercount = 0 def __init__(self, abbr, clustertype): self.abbr = abbr if len(clustertype) > 0: self.clustertype = clustertype def setName(self, name): if len(name) > 0: self.name = name def setDesc(self, desc): if len(desc) > 0: self.desc = desc def setVersion(self, version): if len(version) > 0: self.version = version def setVendor(self, vendor): if len(vendor) > 0: self.vendor = vendor def addMember(self, member): if len(member) > 0: if not member in self.__cluster_member_list: self.__cluster_member_list = self.__cluster_member_list + [member] self.membercount = self.membercount + 1 def prettyPrint(self, indent = 0, cluster_list = None): indentStr = "" if indent > 0: for x in range(1, indent): indentStr = indentStr + " " print "%s%s (%s)" % (indentStr, self.abbr, self.clustertype.lower().capitalize()) print "%s Name: %s" % (indentStr, self.name) print "%s Description: %s" % (indentStr, self.desc) print "%s Version: %s" % (indentStr, self.version) print "%s Vendor: %s" % (indentStr, self.vendor) print "%s Members:" % (indentStr) for member in self.__cluster_member_list: if cluster_list != None: got_member = cluster_list.getCluster(member) if got_member != None: got_member.prettyPrint(indent + 4) else: print "%s %s (not a Cluster)" % (indentStr, member) print else: print "%s %s (not a Cluster)" % (indentStr, member) print print print print "Sun Cluster/Package TOC File Reader" print "===================================" print print try: clustertoc_file = open("dot.clustertoc2", 'r') except: print "Error opening 'dot.clustertoc2' ... terminating." sys.exit(10) current_cluster = None cluster_list = ClusterList() while 1: thisline = clustertoc_file.readline() if len(thisline) < 1: break thisline = thisline.strip() elements = thisline.split('=') if len(elements) == 1: if elements[0].strip().upper() == 'END': current_cluster = None continue elif len(elements) == 2: if current_cluster != None: # add data to present cluster if elements[0].strip().upper() == 'NAME': current_cluster.setName(elements[1].strip()) if elements[0].strip().upper() == 'DESC': current_cluster.setDesc(elements[1].strip()) if elements[0].strip().upper() == 'VENDOR': current_cluster.setVendor(elements[1].strip()) if elements[0].strip().upper() == 'VERSION': current_cluster.setVersion(elements[1].strip()) if elements[0].strip().upper() == 'SUNW_CSRMEMBER': current_cluster.addMember(elements[1].strip()) continue elif elements[0].strip().upper() == 'CLUSTER': # new cluster current_cluster = Cluster(elements[1].strip(), elements[0].strip().upper()) cluster_list.addCluster(current_cluster) continue elif elements[0].strip().upper() == 'METACLUSTER': # new metacluster current_cluster = Cluster(elements[1].strip(), elements[0].strip().upper()) cluster_list.addCluster(current_cluster) continue print 'Unknown Line: ' + repr(elements) # -- Cleanup -- clustertoc_file.close() cluster_list.printList() print print # -- Do some printing -- #print "==============================================" #print " Printing: SUNWCall" #print "==============================================" #cluster_list.getCluster('SUNWCall').prettyPrint(0, cluster_list) # -- Do some printing -- #print "==============================================" #print " Printing: SUNWCxall" #print "==============================================" #cluster_list.getCluster('SUNWCall').prettyPrint(0, cluster_list)