- # regular nodes are not affected
- if reservation_policy == 'none':
- return
- elif reservation_policy not in ['lease_or_idle','lease_or_shared']:
- logger.log("reservation: ignoring -- unexpected value for reservation_policy %r"%reservation_policy)
- return
- # at this point we have reservation_policy in ['lease_or_idle','lease_or_shared']
- # we make no difference for now
- logger.verbose('reservation.GetSlivers : reservable node -- listing timers ')
-
- self.sync_timers_from_leases()
- for timestamp in self.timers.keys():
- logger.verbose('TIMER armed for %s'%self.show_time(timestamp))
-
- logger.verbose('reservation.GetSlivers : end listing timers')
-
+ # quick an d dirty - this does not obey the account/sliver_vs/controller hierarchy
+ def suspend_slice(self, slicename):
+ logger.log('reservation: Suspending slice %s'%(slicename))
+ self.debug_box('before suspending', slicename)
+ worker=account.get(slicename)
+ try:
+ logger.log("reservation: Located worker object %r"%worker)
+ worker.stop()
+ except AttributeError:
+ # when the underlying worker is not entirely initialized yet
+ pass
+ except:
+ logger.log_exc("reservation.suspend_slice: Could not stop slice through its worker", name=slicename)
+ # we hope the status line won't return anything
+ self.debug_box('after suspending', slicename)
+
+ # exclude can be a slicename or a list
+ # this probably should run in parallel
+ def suspend_all_slices (self, exclude=[]):
+ if isinstance(exclude, str): exclude=[exclude,]
+ for sliver in self.data['slivers']:
+ # skip excluded
+ if sliver['name'] in exclude: continue
+ # is this a system sliver ?
+ system_slice=False
+ for d in sliver['attributes']:
+ if d['tagname']=='system' and d['value'] : system_slice=True
+ if system_slice: continue
+ self.suspend_slice(sliver['name'])
+
+ def restart_slice(self, slicename):
+ logger.log('reservation: Restarting slice %s'%(slicename))
+ self.debug_box('before restarting', slicename)
+ worker=account.get(slicename)
+ try:
+ # dig in self.data to retrieve corresponding rec
+ slivers = [ sliver for sliver in self.data['slivers'] if sliver['name']==slicename ]
+ sliver=slivers[0]
+ record=database.db.get(slicename)
+ record['enabled']=True
+ #
+ logger.log("reservation: Located worker object %r"%worker)
+ logger.log("reservation: Located record at the db %r"%record)
+ worker.start(record)
+ except:
+ logger.log_exc("reservation.restart_slice: Could not start slice through its worker", name=slicename)
+ # we hope the status line won't return anything
+ self.debug_box('after restarting', slicename)