move plugin to prevent conflict in __init__.py
[nodemanager.git] / nodemanager.py
index 8b2c6f6..57c96c7 100755 (executable)
@@ -15,16 +15,16 @@ import xmlrpclib
 import socket
 import os
 import sys
-import resource
 import glob
 import pickle
+import random
+import resource
 
 import logger
 import tools
 
 from config import Config
 from plcapi import PLCAPI
-import random
 
 
 class NodeManager:
@@ -74,7 +74,10 @@ class NodeManager:
         # Deal with plugins directory
         if os.path.exists(self.options.path):
             sys.path.append(self.options.path)
-            plugins = [ os.path.split(os.path.splitext(x)[0])[1] for x in glob.glob( os.path.join(self.options.path,'*.py') ) ]
+            plugins = [ os.path.split(os.path.splitext(x)[0])[1]
+                        for x in glob.glob( os.path.join(self.options.path,'*.py') )
+                        if not x.endswith("/__init__.py")
+                        ]
             self.modules += plugins
         if self.options.user_module:
             assert self.options.user_module in self.modules
@@ -171,6 +174,9 @@ class NodeManager:
             return {}
 
     def run(self):
+        # make sure to create /etc/planetlab/virt so others can read that
+        # used e.g. in vsys-scripts's sliceip
+        tools.get_node_virt()
         try:
             if self.options.daemon: tools.daemon()
 
@@ -199,7 +205,16 @@ If this is not the case, please remove the pid file %s. -- exiting""" % (other_p
                     m.start()
                     self.loaded_modules.append(m)
                 except ImportError, err:
-                    print "Warning while loading module %s:" % module, err
+                    logger.log_exc ("ERROR while loading module %s - skipping:" % module)
+                    # if we fail to load any of these, it's really no need to go on any further
+                    if module in NodeManager.core_modules:
+                        logger.log("FATAL : failed to load core module %s"%module)
+                except AttributeError, err:
+                    # triggered when module doesn't have a 'start' method
+                    logger.log_exc ("ERROR while starting module %s - skipping:" % module)
+                    # if we fail to load any of these, it's really no need to go on any further
+                    if module in NodeManager.core_modules:
+                        logger.log("FATAL : failed to start core module %s"%module)
 
             # sort on priority (lower first)
             def sort_module_priority (m1,m2):