oops, too much messing about
[nodemanager.git] / conf_files.py
index fd926a5..252c795 100644 (file)
@@ -3,26 +3,31 @@
 import grp
 import os
 import pwd
-import sha
+try:
+    from hashlib import sha1 as sha
+except ImportError:
+    from sha import sha
 import string
-import threading
 
 import curlwrapper
 import logger
 import tools
 import xmlrpclib
+from config import Config
+
+# right after net
+priority = 2
 
 class conf_files:
-    def __init__(self, config, noscripts=False):
-        self.config = config
+    def __init__(self, noscripts=False):
+        self.config = Config()
         self.noscripts = noscripts
-        self.cond = threading.Condition()
         self.data = None
 
     def checksum(self, path):
         try:
             f = open(path)
-            try: return sha.new(f.read()).digest()
+            try: return sha(f.read()).digest()
             finally: f.close()
         except IOError: return None
 
@@ -54,19 +59,14 @@ class conf_files:
             else:                url += '?'
             url += "node_id=%d"%tools.node_id()
         else:
-            logger.log('%s -- WARNING, cannot add node_id to request'%dest)
-        # pass slicefamily as well, as stored in /etc/planetlab/slicefamily ont the node
-        if tools.slicefamily():
-            if url.find('?') >0: url += '&'
-            else:                url += '?'
-            url += "slicefamily=%s"%tools.slicefamily()
+            logger.log('conf_files: %s -- WARNING, cannot add node_id to request'%dest)
         try:
-            logger.verbose("retrieving URL=%s"%url)
+            logger.verbose("conf_files: retrieving URL=%s"%url)
             contents = curlwrapper.retrieve(url, self.config.cacert)
         except xmlrpclib.ProtocolError,e:
             logger.log('conf_files: failed to retrieve %s from %s, skipping' % (dest, url))
             return
-        if not cf_rec['always_update'] and sha.new(contents).digest() == self.checksum(dest):
+        if not cf_rec['always_update'] and sha(contents).digest() == self.checksum(dest):
             return
         if self.system(cf_rec['preinstall_cmd']):
             self.system(err_cmd)
@@ -78,37 +78,21 @@ class conf_files:
         if self.system(cf_rec['postinstall_cmd']): self.system(err_cmd)
 
     def run_once(self, data):
-        for f in data['conf_files']:
-            try: self.update_conf_file(f)
-            except: logger.log_exc()
-
-    def run(self):
-        while True:
-            self.cond.acquire()
-            while self.data == None: self.cond.wait()
-            data = self.data
-            self.data = None
-            self.cond.release()
-            self.run_once(data)
-
-    def callback(self, data):
-        if data != None:
-            self.cond.acquire()
-            self.data = data
-            self.cond.notify()
-            self.cond.release()
-
-main = None
-
-def start(options, config):
-    global main
-    main = conf_files(config)
-    tools.as_daemon_thread(main.run)
-
-def GetSlivers(data):
-    global main
-    assert main is not None
-    return main.callback(data)
+        if data.has_key("conf_files"):
+            for f in data['conf_files']:
+                try: self.update_conf_file(f)
+                except: logger.log_exc("conf_files: failed to update conf_file")
+        else:
+            logger.log_missing_data("conf_files.run_once",'conf_files')
+
+
+def start(): pass
+
+def GetSlivers(data, config = None, plc = None):
+    logger.log("conf_files: Running.")
+    cf = conf_files()
+    cf.run_once(data)
+    logger.log("conf_files: Done.")
 
 if __name__ == '__main__':
     import optparse
@@ -119,7 +103,6 @@ if __name__ == '__main__':
     (options, args) = parser.parse_args()
 
     # Load /etc/planetlab/plc_config
-    from config import Config
     config = Config(options.config)
 
     # Load /etc/planetlab/session
@@ -132,6 +115,6 @@ if __name__ == '__main__':
     from plcapi import PLCAPI
     plc = PLCAPI(config.plc_api_uri, config.cacert, auth = session)
 
-    main = conf_files(config, options.noscripts)
+    main = conf_files(options.noscripts)
     data = plc.GetSlivers()
     main.run_once(data)