Change plugin API (GetSlivers()) argument order to avoid unnecessary PLCAPI dependenc...
authorFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Thu, 6 Aug 2009 16:35:33 +0000 (16:35 +0000)
committerFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Thu, 6 Aug 2009 16:35:33 +0000 (16:35 +0000)
conf_files.py
net.py
nm.py
plcapi.py
plugins/codemux.py
plugins/rawdisk.py
plugins/sliverauth.py
plugins/specialaccounts.py
plugins/vsys.py
sm.py

index 31c325c..b3b65f8 100644 (file)
@@ -86,7 +86,7 @@ class conf_files:
 
 def start(options, config): pass
 
 
 def start(options, config): pass
 
-def GetSlivers(plc, data, config = None):
+def GetSlivers(data, config = None, plc = None):
     logger.log("conf_files: Running.")
     cf = conf_files()
     cf.run_once(data)
     logger.log("conf_files: Running.")
     cf = conf_files()
     cf.run_once(data)
diff --git a/net.py b/net.py
index 7c9242d..2d02905 100644 (file)
--- a/net.py
+++ b/net.py
@@ -16,7 +16,7 @@ import bwlimit, logger, iptables
 def start(options, conf):
     logger.log("net plugin starting up...")
 
 def start(options, conf):
     logger.log("net plugin starting up...")
 
-def GetSlivers(plc, data, config):
+def GetSlivers(data, config, plc):
     logger.verbose("net:GetSlivers called.")
     InitInterfaces(plc, data) # writes sysconfig files.
     if 'OVERRIDES' in dir(config): 
     logger.verbose("net:GetSlivers called.")
     InitInterfaces(plc, data) # writes sysconfig files.
     if 'OVERRIDES' in dir(config): 
diff --git a/nm.py b/nm.py
index c262906..ed5309e 100755 (executable)
--- a/nm.py
+++ b/nm.py
@@ -54,7 +54,7 @@ if os.path.exists(options.path):
 
 modules = []
 
 
 modules = []
 
-def GetSlivers(plc, config):
+def GetSlivers(config, plc):
     '''Run call backs defined in modules'''
     try: 
         logger.log("Syncing w/ PLC")
     '''Run call backs defined in modules'''
     try: 
         logger.log("Syncing w/ PLC")
@@ -70,7 +70,7 @@ def GetSlivers(plc, config):
     for module in modules:
         try:        
             callback = getattr(module, 'GetSlivers')
     for module in modules:
         try:        
             callback = getattr(module, 'GetSlivers')
-            callback(plc, data, config)
+            callback(data, config, plc)
         except: logger.log_exc()
 
 
         except: logger.log_exc()
 
 
@@ -133,10 +133,20 @@ def run():
         irandom=int(options.random)
         plc = PLCAPI(config.plc_api_uri, config.cacert, session, timeout=iperiod/2)
 
         irandom=int(options.random)
         plc = PLCAPI(config.plc_api_uri, config.cacert, session, timeout=iperiod/2)
 
+        #check auth
+        while plc.check_authentication() != True:
+            try:
+                plc.update_session()
+                logger.log("Authentication Failure.  Retrying")
+            except:
+                logger.log("Retry Failed.  Waiting")
+            time.sleep(iperiod)
+
+
         while True:
         # Main NM Loop
             logger.verbose('mainloop - nm:getSlivers - period=%d random=%d'%(iperiod,irandom))
         while True:
         # Main NM Loop
             logger.verbose('mainloop - nm:getSlivers - period=%d random=%d'%(iperiod,irandom))
-            GetSlivers(plc, config)
+            GetSlivers(config, plc)
             delay=iperiod + random.randrange(0,irandom)
             logger.verbose('mainloop - sleeping for %d s'%delay)
             time.sleep(delay)
             delay=iperiod + random.randrange(0,irandom)
             logger.verbose('mainloop - sleeping for %d s'%delay)
             time.sleep(delay)
index 03a9ca7..2ef5dc1 100644 (file)
--- a/plcapi.py
+++ b/plcapi.py
@@ -2,6 +2,7 @@
 
 import safexmlrpc
 import hmac, sha
 
 import safexmlrpc
 import hmac, sha
+import logger
 
 class PLCAPI:
     """
 
 class PLCAPI:
     """
@@ -32,11 +33,9 @@ class PLCAPI:
             self.node_id = self.key = self.session = None
 
         self.server = safexmlrpc.ServerProxy(self.uri, self.cacert, self.timeout, allow_none = 1, **kwds)
             self.node_id = self.key = self.session = None
 
         self.server = safexmlrpc.ServerProxy(self.uri, self.cacert, self.timeout, allow_none = 1, **kwds)
-        
-        self.__check_authentication()
 
 
 
 
-    def __update_session(self, f="/usr/boot/plnode.txt"):
+    def update_session(self, f="/usr/boot/plnode.txt"):
         # try authenticatipopulate /etc.planetlab/session 
         def plnode(key):
             try:
         # try authenticatipopulate /etc.planetlab/session 
         def plnode(key):
             try:
@@ -48,25 +47,12 @@ class PLCAPI:
         plc = PLCAPI(self.uri, self.cacert, auth, self.timeout)
         open("/etc/planetlab/session", 'w').write(plc.GetSession().strip())
         self.session = open("/etc/planetlab/session").read().strip()
         plc = PLCAPI(self.uri, self.cacert, auth, self.timeout)
         open("/etc/planetlab/session", 'w').write(plc.GetSession().strip())
         self.session = open("/etc/planetlab/session").read().strip()
+
         
         
-    def __check_authentication(self):
+    def check_authentication(self):
         # just a simple call to check authentication
         # just a simple call to check authentication
-        def check():
-            if (self.node_id and self.key) or self.session:
-                try:
-                    if self.AuthCheck() == 1: return True
-                except:
-                    return False
-            return False
-        if not check():
-            if self.node_id and self.key:
-                # if hmac fails, just make it fail
-                raise Exception, "Unable to authenticate with hmac"
-            else:
-                self.__update_session()
-                if not check():
-                    raise Exception, "Unable to authenticate with session"
-    
+        return self.AuthCheck(self)
+
 
     def add_auth(self, function):
         """
 
     def add_auth(self, function):
         """
index b367b58..3852aa2 100644 (file)
@@ -14,7 +14,7 @@ CODEMUXCONF="/etc/codemux/codemux.conf"
 def start(options, conf):
     logger.log("codemux plugin starting up...")
 
 def start(options, conf):
     logger.log("codemux plugin starting up...")
 
-def GetSlivers(plc, data, config):
+def GetSlivers(data, config, plc = None):
     """
     For each sliver with the codemux attribute, parse out "host,port" 
     and make entry in conf.  Restart service after.
     """
     For each sliver with the codemux attribute, parse out "host,port" 
     and make entry in conf.  Restart service after.
index b220a46..8124f67 100644 (file)
@@ -46,7 +46,7 @@ def get_unused_devices():
     partitions.close()
     return devices
 
     partitions.close()
     return devices
 
-def GetSlivers(plc, data, conf):
+def GetSlivers(data, config=None, plc=None):
     if 'slivers' not in data: 
         logger.log("sliverauth: getslivers data lack's sliver information. IGNORING!")
         return
     if 'slivers' not in data: 
         logger.log("sliverauth: getslivers data lack's sliver information. IGNORING!")
         return
index ba1b30b..0cbc8ab 100644 (file)
@@ -31,7 +31,7 @@ def SetSliverTag(plc, slice, tagname, value):
         slivertag_id=slivertags[0]['slice_tag_id']
         plc.UpdateSliceTag(slivertag_id,value)
 
         slivertag_id=slivertags[0]['slice_tag_id']
         plc.UpdateSliceTag(slivertag_id,value)
 
-def GetSlivers(plc, data, conf):
+def GetSlivers(data, config, plc):
     # XXX REMOVE ME
     logger.log("sliverauth: DISABLED!")
     return
     # XXX REMOVE ME
     logger.log("sliverauth: DISABLED!")
     return
index 5debf95..545910f 100644 (file)
@@ -21,8 +21,11 @@ import tools
 def start(options, conf):
     logger.log("personkeys plugin starting up...")
 
 def start(options, conf):
     logger.log("personkeys plugin starting up...")
 
-def GetSlivers(plc, data, conf):
-    if 'accounts' not in data: return
+def GetSlivers(data, conf = None, plc = None):
+    if 'accounts' not in data: 
+        logger.log("specialaccounts: No account information found.  DISABLED!")
+        return
+
     for account in data['accounts']:
         name = account['name']
         new_keys = account['keys']
     for account in data['accounts']:
         name = account['name']
         new_keys = account['keys']
@@ -37,17 +40,17 @@ def GetSlivers(plc, data, conf):
         dot_ssh = os.path.join(pw_dir,'.ssh')
         if not os.access(dot_ssh, os.F_OK): os.mkdir(dot_ssh)
         auth_keys = os.path.join(dot_ssh,'authorized_keys')
         dot_ssh = os.path.join(pw_dir,'.ssh')
         if not os.access(dot_ssh, os.F_OK): os.mkdir(dot_ssh)
         auth_keys = os.path.join(dot_ssh,'authorized_keys')
+
         logger.log("new keys = %s" % auth_keys)
         fd, fname = tempfile.mkstemp('','authorized_keys',dot_ssh)
 
         logger.log("new keys = %s" % auth_keys)
         fd, fname = tempfile.mkstemp('','authorized_keys',dot_ssh)
 
-    for key in new_keys:
+        for key in new_keys:
             os.write(fd,key)
             os.write(fd,'\n')
 
         os.close(fd)
             os.write(fd,key)
             os.write(fd,'\n')
 
         os.close(fd)
-        if os.path.exists(auth_keys):
-            os.unlink(auth_keys)
-        os.rename(fname,auth_keys)
+        if os.path.exists(auth_keys): os.unlink(auth_keys)
+        os.rename(fname, auth_keys)
 
         # set permissions properly
         os.chmod(dot_ssh, 0700)
 
         # set permissions properly
         os.chmod(dot_ssh, 0700)
index a2bc2bb..927c7c1 100644 (file)
@@ -13,7 +13,7 @@ VSYSBKEND="/vsys"
 def start(options, conf):
     logger.log("vsys plugin starting up...")
 
 def start(options, conf):
     logger.log("vsys plugin starting up...")
 
-def GetSlivers(plc, data, config=None):
+def GetSlivers(data, config=None, plc=None):
     """For each sliver with the vsys attribute, set the script ACL, create the vsys directory in the slice, and restart vsys."""
     # Touch ACLs and create dict of available
     scripts = {}
     """For each sliver with the vsys attribute, set the script ACL, create the vsys directory in the slice, and restart vsys."""
     # Touch ACLs and create dict of available
     scripts = {}
diff --git a/sm.py b/sm.py
index 62de7f9..0b4d505 100644 (file)
--- a/sm.py
+++ b/sm.py
@@ -54,7 +54,7 @@ DEFAULT_ALLOCATION = {
 start_requested = False  # set to True in order to request that all slivers be started
 
 @database.synchronized
 start_requested = False  # set to True in order to request that all slivers be started
 
 @database.synchronized
-def GetSlivers(plc, data, config = None, fullupdate=True):
+def GetSlivers(data, config = None, plc=None, fullupdate=True):
     """This function has two purposes.  One, convert GetSlivers() data
     into a more convenient format.  Two, even if no updates are coming
     in, use the GetSlivers() heartbeat as a cue to scan for expired
     """This function has two purposes.  One, convert GetSlivers() data
     into a more convenient format.  Two, even if no updates are coming
     in, use the GetSlivers() heartbeat as a cue to scan for expired