From b2fb90af28df5c4dda68871b217530aff57690d5 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Thu, 10 Jun 2010 17:13:26 +0000 Subject: [PATCH] cosmetic --- accounts.py | 4 +++- controller.py | 7 ++++--- nodemanager.py | 5 +++-- plugins/reservation.py | 27 +++++++++++++++++++++++---- slivermanager.py | 40 ++++++++++++++++++++-------------------- 5 files changed, 53 insertions(+), 30 deletions(-) diff --git a/accounts.py b/accounts.py index 5bd9b60..2afa333 100644 --- a/accounts.py +++ b/accounts.py @@ -46,7 +46,9 @@ create_sem = threading.Semaphore(1) destroy_sem = threading.Semaphore(1) def register_class(acct_class): - """Call once for each account class. This method adds the class to the dictionaries used to look up account classes by shell and type.""" + """Call once for each account class. This method adds the class +to the dictionaries used to look up account classes by shell and +type.""" shell_acct_class[acct_class.SHELL] = acct_class type_acct_class[acct_class.TYPE] = acct_class diff --git a/controller.py b/controller.py index ab8e521..feca5e9 100644 --- a/controller.py +++ b/controller.py @@ -4,12 +4,13 @@ """Delegate accounts are used to provide secure access to the XMLRPC API. They are normal Unix accounts with a shell that tunnels XMLRPC requests to the API server.""" -import accounts -import logger -import tools from pwd import getpwnam from grp import getgrnam +import logger +import tools +import accounts + class Controller(accounts.Account): SHELL = '/usr/bin/forward_api_calls' # tunneling shell TYPE = 'controller.Controller' diff --git a/nodemanager.py b/nodemanager.py index 11be5f9..aca670d 100755 --- a/nodemanager.py +++ b/nodemanager.py @@ -183,7 +183,8 @@ class NodeManager: 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 @@ -250,5 +251,5 @@ def 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) diff --git a/plugins/reservation.py b/plugins/reservation.py index ddb974b..d5fdde6 100644 --- a/plugins/reservation.py +++ b/plugins/reservation.py @@ -64,7 +64,7 @@ class reservation: def clear_timer (self,timestamp): round=self.round_time(timestamp) - if self.timers.has_key(round): + if round in self.timers: timer=self.timers[round] timer.cancel() del self.timers[round] @@ -80,7 +80,7 @@ class reservation: # forget about past events if timestamp < now: return round=self.round_time(timestamp) - if self.timers.has_key(round): return + if round in self.timers: return def this_closure (): self.round_time_callback (round) timer=threading.Timer(timestamp-now,this_closure) @@ -91,8 +91,27 @@ class reservation: now=time.time() round_now=self.round_time(now) logger.log('reservation.round_time_callback now=%f round_now=%d arg=%d...'%(now,round_now,time_arg)) - leases_text="leases=%r"%self.data['leases'] - logger.log(leases_text) + leases=self.data.leases + if leases: + logger.verbose('Listing leases beg') + for lease in leases: + logger.verbose("lease=%r"%lease) + logger.verbose('Listing leases end') + for lease in leases: + if lease['t_until']==round_now: + logger.log('Suspending slice %s - ending lease %d'%(lease['name'],lease['lease_id'])) + self.suspend_slice (lease['name']) + for lease in leases: + if lease['t_from']==round_now: + logger.log('Starting slice %s - starting lease %d'%(lease['name'],lease['lease_id'])) + self.restart_slice (lease['name']) + + + def suspend_slice(self, slicename): + logger.log('reservation.suspend_slice, slice %s, to be written'%slicename) + + def restart_slice(self, slicename): + logger.log('reservation.restart_slice, slice %s, to be written'%slicename) def show_time (self, timestamp): return time.strftime ("%Y-%m-%d %H:%M %Z",time.gmtime(timestamp)) diff --git a/slivermanager.py b/slivermanager.py index 56f2c48..2122865 100644 --- a/slivermanager.py +++ b/slivermanager.py @@ -10,20 +10,20 @@ also to make inter-sliver resource loans. The sliver manager is also responsible for handling delegation accounts. """ -priority=10 - import string,re import logger -import accounts import api, api_calls import database +import accounts import controller import sliver_vs try: from bwlimit import bwmin, bwmax except ImportError: bwmin, bwmax = 8, 1000*1000*1000 +priority=10 + DEFAULT_ALLOCATION = { 'enabled': 1, @@ -82,7 +82,7 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True): if network['is_primary'] and network['bwlimit'] is not None: DEFAULT_ALLOCATION['net_max_rate'] = network['bwlimit'] / 1000 - # Take intscripts (global) returned by API, make dict + # Take initscripts (global) returned by API, make dict if 'initscripts' not in data: logger.log_missing_data("slivermanager.GetSlivers",'initscripts') return @@ -97,9 +97,9 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True): rec.setdefault('timestamp', data['timestamp']) # convert attributes field to a proper dict - attr_dict = {} - for attr in rec.pop('attributes'): attr_dict[attr['tagname']] = attr['value'] - rec.setdefault("attributes", attr_dict) + attributes = {} + for attr in rec.pop('attributes'): attributes[attr['tagname']] = attr['value'] + rec.setdefault("attributes", attributes) # squash keys keys = rec.pop('keys') @@ -109,37 +109,37 @@ def GetSlivers(data, config = None, plc=None, fullupdate=True): ## instantiation here, but i suppose its the same thing when you think about it. -FA # Handle nm-controller here if rec['instantiation'].lower() == 'nm-controller': - rec.setdefault('type', attr_dict.get('type', 'controller.Controller')) + rec.setdefault('type', attributes.get('type', 'controller.Controller')) else: - rec.setdefault('type', attr_dict.get('type', 'sliver.VServer')) + rec.setdefault('type', attributes.get('type', 'sliver.VServer')) # set the vserver reference. If none, set to default. - rec.setdefault('vref', attr_dict.get('vref', 'default')) + rec.setdefault('vref', attributes.get('vref', 'default')) # set initscripts. first check if exists, if not, leave empty. - is_name = attr_dict.get('initscript') + is_name = attributes.get('initscript') if is_name is not None and is_name in initscripts: rec['initscript'] = initscripts[is_name] else: rec['initscript'] = '' # set delegations, if none, set empty - rec.setdefault('delegations', attr_dict.get("delegations", [])) + rec.setdefault('delegations', attributes.get("delegations", [])) # extract the implied rspec rspec = {} rec['rspec'] = rspec - for resname, default_amt in DEFAULT_ALLOCATION.iteritems(): + for resname, default_amount in DEFAULT_ALLOCATION.iteritems(): try: - t = type(default_amt) - amt = t.__new__(t, attr_dict[resname]) - except (KeyError, ValueError): amt = default_amt + t = type(default_amount) + amt = t.__new__(t, attributes[resname]) + except (KeyError, ValueError): amt = default_amount rspec[resname] = amt # add in sysctl attributes into the rspec - for key in attr_dict.keys(): + for key in attributes.keys(): if key.find("sysctl.") == 0: - rspec[key] = attr_dict[key] + rspec[key] = attributes[key] database.db.deliver_record(rec) if fullupdate: database.db.set_min_timestamp(data['timestamp']) @@ -151,8 +151,8 @@ def deliver_ticket(data): return GetSlivers(data, fullupdate=False) def start(options, config): - for resname, default_amt in sliver_vs.DEFAULT_ALLOCATION.iteritems(): - DEFAULT_ALLOCATION[resname]=default_amt + for resname, default_amount in sliver_vs.DEFAULT_ALLOCATION.iteritems(): + DEFAULT_ALLOCATION[resname]=default_amount accounts.register_class(sliver_vs.Sliver_VS) accounts.register_class(controller.Controller) -- 2.43.0