X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fcodemux.py;h=6ac314d8696e08764b1d35463dfb19a887a01f68;hb=2d7b127c806b5ca661b03f1c21926f1b9f7fa1e8;hp=731b74df9e8acf2bbdab1874c06133f8b36a9cc5;hpb=7aa5872239d04b2d0a7cb3b00a9c14b5ea18d013;p=nodemanager.git diff --git a/plugins/codemux.py b/plugins/codemux.py index 731b74d..6ac314d 100644 --- a/plugins/codemux.py +++ b/plugins/codemux.py @@ -6,17 +6,16 @@ import logger import os import vserver -from sets import Set from config import Config CODEMUXCONF="/etc/codemux/codemux.conf" -def start(options, conf): - logger.log("codemux plugin starting up...") +def start(): + logger.log("codemux: plugin starting up...") def GetSlivers(data, config, plc = None): """ - For each sliver with the codemux attribute, parse out "host,port" + For each sliver with the codemux attribute, parse out "host,port" and make entry in conf. Restart service after. """ if 'OVERRIDES' in dir(config): @@ -30,7 +29,7 @@ def GetSlivers(data, config, plc = None): slicesinconf = parseConf() # slices that need to be written to the conf codemuxslices = {} - + # XXX Hack for planetflow if slicesinconf.has_key("root"): _writeconf = False else: _writeconf = True @@ -47,14 +46,19 @@ def GetSlivers(data, config, plc = None): if len(parts)<2: logger.log("codemux: attribute value (%s) for codemux not separated by comma. Skipping."%attribute['value']) continue - params = {'host': parts[0], 'port': parts[1]} + if len(parts) == 3: + ip = parts[2] + else: + ip = "" + params = {'host': parts[0], 'port': parts[1], 'ip': ip} + try: # Check to see if sliver is running. If not, continue if vserver.VServer(sliver['name']).is_running(): # Check if new or needs updating if (sliver['name'] not in slicesinconf.keys()) \ or (params not in slicesinconf.get(sliver['name'], [])): - logger.log("codemux: Updaiting slice %s using %s" % \ + logger.log("codemux: Updating slice %s using %s" % \ (sliver['name'], params['host'])) # Toggle write. _writeconf = True @@ -68,13 +72,13 @@ def GetSlivers(data, config, plc = None): pass # Remove slices from conf that no longer have the attribute - for deadslice in Set(slicesinconf.keys()) - Set(codemuxslices.keys()): + for deadslice in set(slicesinconf.keys()) - set(codemuxslices.keys()): # XXX Hack for root slice - if deadslice != "root": + if deadslice != "root": logger.log("codemux: Removing %s" % deadslice) - _writeconf = True + _writeconf = True - if _writeconf: writeConf(sortDomains(codemuxslices)) + if _writeconf: writeConf(sortDomains(codemuxslices)) # ensure the service is running startService() @@ -83,16 +87,16 @@ def writeConf(slivers, conf = CODEMUXCONF): '''Write conf with default entry up top. Elements in [] should have lower order domain names first. Restart service.''' f = open(conf, "w") # This needs to be the first entry... - try: + try: f.write("* root 1080 %s\n" % Config().PLC_PLANETFLOW_HOST) - except AttributeError: + except AttributeError: logger.log("codemux: Can't find PLC_CONFIG_HOST in config. Using PLC_API_HOST") f.write("* root 1080 %s\n" % Config().PLC_API_HOST) # Sort items for like domains for mapping in slivers: for (host, params) in mapping.iteritems(): if params['slice'] == "root": continue - f.write("%s %s %s\n" % (host, params['slice'], params['port'])) + f.write("%s %s %s %s\n" % (host, params['slice'], params['port'], params['ip'])) f.truncate() f.close() try: restartService() @@ -104,7 +108,7 @@ def sortDomains(slivers): dnames = {} # {host: slice} for (slice, params) in slivers.iteritems(): for mapping in params: - dnames[mapping['host']] = {"slice":slice, "port": mapping['port']} + dnames[mapping['host']] = {"slice":slice, "port": mapping['port'], "ip": mapping['ip']} hosts = dnames.keys() # sort by length hosts.sort(key=str.__len__) @@ -113,14 +117,14 @@ def sortDomains(slivers): # make list of slivers sortedslices = [] for host in hosts: sortedslices.append({host: dnames[host]}) - + return sortedslices - + def parseConf(conf = CODEMUXCONF): '''Parse the CODEMUXCONF and return dict of slices in conf. {slice: (host,port)}''' slicesinconf = {} # default - try: + try: f = open(conf) for line in f.readlines(): if line.startswith("#") \ @@ -142,22 +146,25 @@ def isRunning(): else: return False - def restartService(): + if not os.path.exists("/etc/init.d/codemux"): return logger.log("codemux: Restarting codemux service") if isRunning(): - logger.log_call("/etc/init.d/codemux","condrestart") + logger.log_call(["/etc/init.d/codemux","condrestart", ]) else: - logger.log_call("/etc/init.d/codemux","restart") - + logger.log_call(["/etc/init.d/codemux","restart", ]) def startService(): + if not os.path.exists("/etc/init.d/codemux"): return if not isRunning(): logger.log("codemux: Starting codemux service") - logger.log_call("/etc/init.d/codemux", "start") + logger.log_call(["/etc/init.d/codemux", "start", ]) + logger.log_call(["/sbin/chkconfig", "codemux", "on"]) def stopService(): + if not os.path.exists("/etc/init.d/codemux"): return if isRunning(): logger.log("codemux: Stopping codemux service") - logger.log_call("/etc/init.d/codemux", "stop") + logger.log_call(["/etc/init.d/codemux", "stop", ]) + logger.log_call(["/sbin/chkconfig", "codemux", "off"])