Restart instead of start/stop
[nodemanager.git] / nm.py
diff --git a/nm.py b/nm.py
index 6e56501..482f610 100644 (file)
--- a/nm.py
+++ b/nm.py
@@ -14,8 +14,8 @@ import logger
 import tools
 
 from config import Config
-from plcapi import PLCAPI
-
+from plcapi import PLCAPI 
+import random
 
 savedargv = sys.argv[:]
 
@@ -31,9 +31,19 @@ modules = []
 
 def GetSlivers(plc):
     data = plc.GetSlivers()
+    # net needs access to API for i2 nodes.
     for module in modules:
-        callback = getattr(module, 'GetSlivers')
-        callback(data)
+        if module.__name__ == 'net':
+            module.GetSlivers(plc, data)
+        else:
+            callback = getattr(module, 'GetSlivers')
+            callback(data)
+
+def UpdateHostKey(plc):
+    logger.log('Trying to update ssh host key at PLC...')
+    ssh_host_key = open('/etc/ssh/ssh_host_rsa_key.pub').read().strip()
+    plc.BootUpdateNode(dict(ssh_host_key=ssh_host_key))
+    logger.log('Host key update succeeded')
 
 def run():
     try:
@@ -51,7 +61,7 @@ def run():
             print "Warning while writing PID file:", err
 
         # Load and start modules
-        for module in ['net', 'proper', 'conf_files', 'sm']:
+        for module in ['net', 'proper', 'conf_files', 'sm', 'bwmon']:
             try:
                 m = __import__(module)
                 m.start(options, config)
@@ -69,9 +79,11 @@ def run():
         plc = PLCAPI(config.plc_api_uri, config.cacert, session, timeout=options.period/2)
 
         while True:
+            try: UpdateHostKey(plc)
+            except: logger.log_exc()
             try: GetSlivers(plc)
             except: logger.log_exc()
-            time.sleep(options.period)
+            time.sleep(options.period + random.randrange(0,301))
     except: logger.log_exc()