spaces after comma
[nodemanager.git] / plugins / codemux.py
index ef8634f..b25b703 100644 (file)
@@ -1,21 +1,19 @@
-# $Id$
-# $URL$
-
 """Codemux configurator.  Monitors slice attributes and configures CoDemux to mux port 80 based on HOST field in HTTP request.  Forwards to localhost port belonging to configured slice."""
 
 import logger
 import os
-import vserver
+
 from config import Config
+import slivermanager
 
 CODEMUXCONF="/etc/codemux/codemux.conf"
 
-def start(options, conf):
+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):
@@ -29,7 +27,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
@@ -54,17 +52,17 @@ def GetSlivers(data, config, plc = None):
 
                 try:
                     # Check to see if sliver is running.  If not, continue
-                    if vserver.VServer(sliver['name']).is_running():
+                    if slivermanager.is_running(sliver['name']):
                         # 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
                         # Add to dict of codemuxslices.  Make list to support more than one
                         # codemuxed host per slice.
-                        codemuxslices.setdefault(sliver['name'],[])
+                        codemuxslices.setdefault(sliver['name'], [])
                         codemuxslices[sliver['name']].append(params)
                 except:
                     logger.log("codemux:  sliver %s not running yet.  Deferring."\
@@ -74,11 +72,11 @@ def GetSlivers(data, config, plc = None):
     # Remove slices from conf that no longer have the attribute
     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()
 
@@ -87,9 +85,9 @@ 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
@@ -117,24 +115,29 @@ 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("#") \
-            or (len(line.split()) > 4) \
-            or (len(line.split()) < 3):
+            parts = line.split()
+            if line.startswith("#") or (len(parts) > 4) or (len(parts) < 3):
                 continue
-            (host, slice, port) = line.split()[:3]
-            logger.log("codemux:  found %s in conf" % slice, 2)
-            slicesinconf.setdefault(slice, [])
-            slicesinconf[slice].append({"host": host, "port": port})
+            if len(parts) == 4:
+                (host, slice, port, ip) = parts
+                logger.log("codemux:  found %s in conf" % slice, 2)
+                slicesinconf.setdefault(slice, [])
+                slicesinconf[slice].append({"host": host, "port": port, "ip": ip})
+            else:
+                (host, slice, port) = parts[:3]
+                logger.log("codemux:  found %s in conf" % slice, 2)
+                slicesinconf.setdefault(slice, [])
+                slicesinconf[slice].append({"host": host, "port": port})
         f.close()
     except IOError: logger.log_exc("codemux.parseConf got IOError")
     return slicesinconf
@@ -150,9 +153,9 @@ 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
@@ -168,3 +171,4 @@ def stopService():
         logger.log("codemux:  Stopping codemux service")
         logger.log_call(["/etc/init.d/codemux", "stop", ])
     logger.log_call(["/sbin/chkconfig", "codemux", "off"])
+