class NodeManager:
- id="$Id$"
-
PLUGIN_PATH = "/usr/share/NodeManager/plugins"
DB_FILE = "/var/lib/nodemanager/getslivers.pickle"
# NOTE: modules listed here will also be loaded in this order
# once loaded, they get re-ordered after their priority (lower comes first)
# for determining the runtime order
- core_modules=['net','conf_files', 'sm', 'bwmon']
+ core_modules=['net', 'conf_files', 'slivermanager', 'bwmon']
default_period=600
default_random=301
def __init__ (self):
parser = optparse.OptionParser()
- parser.add_option('-d', '--daemon', action='store_true', dest='daemon', default=False, help='run daemonized')
- parser.add_option('-s', '--startup', action='store_true', dest='startup', default=False, help='run all sliver startup scripts')
- parser.add_option('-f', '--config', action='store', dest='config', default='/etc/planetlab/plc_config', help='PLC configuration file')
- parser.add_option('-k', '--session', action='store', dest='session', default='/etc/planetlab/session', help='API session key (or file)')
+ parser.add_option('-d', '--daemon', action='store_true', dest='daemon', default=False,
+ help='run daemonized')
+ parser.add_option('-s', '--startup', action='store_true', dest='startup', default=False,
+ help='run all sliver startup scripts')
+ parser.add_option('-f', '--config', action='store', dest='config', default='/etc/planetlab/plc_config',
+ help='PLC configuration file')
+ parser.add_option('-k', '--session', action='store', dest='session', default='/etc/planetlab/session',
+ help='API session key (or file)')
parser.add_option('-p', '--period', action='store', dest='period', default=NodeManager.default_period,
help='Polling interval (sec) - default %d'%NodeManager.default_period)
parser.add_option('-r', '--random', action='store', dest='random', default=NodeManager.default_random,
help='Range for additional random polling interval (sec) -- default %d'%NodeManager.default_random)
- parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False, help='more verbose log')
- parser.add_option('-P', '--path', action='store', dest='path', default=NodeManager.PLUGIN_PATH, help='Path to plugins directory')
+ parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False,
+ help='more verbose log')
+ parser.add_option('-P', '--path', action='store', dest='path', default=NodeManager.PLUGIN_PATH,
+ help='Path to plugins directory')
# NOTE: BUG the 'help' for this parser.add_option() wont list plugins from the --path argument
parser.add_option('-m', '--module', action='store', dest='user_module', default='', help='run a single module')
def GetSlivers(self, config, plc):
- """Run call backs defined in modules"""
+ """Retrieves GetSlivers at PLC and triggers callbacks defined in modules/plugins"""
try:
logger.log("nodemanager: Syncing w/ PLC")
# retrieve GetSlivers from PLC
self.getPLCDefaults(data, config)
# tweak the 'vref' attribute from GetSliceFamily
self.setSliversVref (data)
- # log it for debug purposes, no matter what verbose is
- logger.log_slivers(data)
# dump it too, so it can be retrieved later in case of comm. failure
self.dumpSlivers(data)
+ # log it for debug purposes, no matter what verbose is
+ logger.log_slivers(data)
logger.verbose("nodemanager: Sync w/ PLC done")
last_data=data
except:
last_data=self.loadSlivers()
# Invoke GetSlivers() functions from the callback modules
for module in self.loaded_modules:
- logger.verbose('triggering GetSlivers callback for module %s'%module.__name__)
+ logger.verbose('nodemanager: triggering %s.GetSlivers'%module.__name__)
try:
callback = getattr(module, 'GetSlivers')
module_data=data
try:
other_pid = tools.pid_file()
if other_pid != None:
- print """There might be another instance of the node manager running as pid %d. If this is not the case, please remove the pid file %s""" % (other_pid, tools.PID_FILE)
+ print """There might be another instance of the node manager running as pid %d.
+If this is not the case, please remove the pid file %s. -- exiting""" % (other_pid, tools.PID_FILE)
return
except OSError, err:
print "Warning while writing PID file:", err
for module in self.modules:
try:
m = __import__(module)
+ logger.verbose("nodemanager: triggering %s.start"%m.__name__)
m.start(self.options, config)
self.loaded_modules.append(m)
except ImportError, err:
except: logger.log_exc("nodemanager: failed in run")
def run():
- logger.log("======================================== Entering nodemanager.py "+NodeManager.id)
+ logger.log("======================================== Entering nodemanager.py")
NodeManager().run()
if __name__ == '__main__':
run()
else:
- # This is for debugging purposes. Open a copy of Python and import nm
+ # This is for debugging purposes. Open a copy of Python and import nodemanager
tools.as_daemon_thread(run)