X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fiotlab%2Fiotlabdriver.py;h=efbe4b6bb85d394bad1db5d33c290cb2d0fb32cf;hb=9032e1b2ee2f49b778258d4bc639c3c54daaea49;hp=5746fed27c9714471396154319ea2438ba84f623;hpb=dc78e3f893a576ed12c695682770a124f1462acc;p=sfa.git diff --git a/sfa/iotlab/iotlabdriver.py b/sfa/iotlab/iotlabdriver.py index 5746fed2..efbe4b6b 100644 --- a/sfa/iotlab/iotlabdriver.py +++ b/sfa/iotlab/iotlabdriver.py @@ -10,6 +10,7 @@ from sfa.iotlab.iotlabshell import IotLABShell from sfa.iotlab.iotlabaggregate import IotLABAggregate from sfa.iotlab.iotlablease import LeaseTable + class IotLabDriver(Driver): """ SFA driver for Iot-LAB testbed @@ -28,31 +29,26 @@ class IotLabDriver(Driver): """ Not used and need by SFA """ pass - ######################################## - ########## registry oriented - ######################################## + # ####################################### + # ######### registry oriented + # ####################################### ########## def register(self, sfa_record, hrn, pub_key): logger.warning("iotlabdriver register : not implemented") return -1 - - ########## def update(self, old_sfa_record, new_sfa_record, hrn, new_key): logger.warning("iotlabdriver update : not implemented") return True - - ########## def remove(self, sfa_record): logger.warning("iotlabdriver remove : not implemented") return True - - ######################################## - ########## aggregate oriented - ######################################## + # ####################################### + # ######### aggregate oriented + # ####################################### def provision(self, urns, options=None): logger.warning("iotlabdriver provision : not implemented") @@ -61,15 +57,12 @@ class IotLabDriver(Driver): rspec_version = version_manager.get_version(opt) return self.describe(urns, rspec_version, options=options) - def delete(self, urns, options=None): logger.warning("iotlabdriver delete : not implemented") geni_slivers = [] return geni_slivers - def aggregate_version(self): - logger.warning("iotlabdriver aggregate_version") version_manager = VersionManager() ad_rspec_versions = [] request_rspec_versions = [] @@ -83,7 +76,6 @@ class IotLabDriver(Driver): 'geni_request_rspec_versions': request_rspec_versions, 'geni_ad_rspec_versions': ad_rspec_versions} - def list_resources(self, version=None, options=None): logger.warning("iotlabdriver list_resources") if not options: @@ -92,7 +84,6 @@ class IotLabDriver(Driver): rspec = aggregate.list_resources(version=version, options=options) return rspec - def describe(self, urns, version, options=None): logger.warning("iotlabdriver describe") if not options: @@ -100,7 +91,6 @@ class IotLabDriver(Driver): aggregate = IotLABAggregate(self) return aggregate.describe(urns, version=version, options=options) - def status(self, urns, options=None): logger.warning("iotlabdriver status") aggregate = IotLABAggregate(self) @@ -109,33 +99,31 @@ class IotLabDriver(Driver): 'geni_slivers': desc['geni_slivers']} return status - - def _get_users(self): + def _get_users(self, email=None): """ Get all users """ - ret = self.shell.get_users() + ret = self.shell.get_users(email) if 'error' in ret: return None return ret - def _get_user_login(self, caller_user): """ Get user login with email """ email = caller_user['email'] # ensure user exist in LDAP tree - users = self._get_users() - if users and not email in users: + users = self._get_users(email) + if email not in users: self.shell.add_user(caller_user) - users = self._get_users() + users = self._get_users(email) if users and email in users: return users[email]['login'] else: return None - @classmethod def _get_experiment(cls, rspec): """ - Find in RSpec leases the experiment start time, duration and nodes list. + Find in RSpec leases the experiment start time, duration and nodes + list. :Example: @@ -155,20 +143,27 @@ class IotLabDriver(Driver): """ leases = rspec.version.get_leases() start_time = min([int(lease['start_time']) - for lease in leases]) - end_time = max([int(lease['start_time']) + - int(lease['duration'])*60 - for lease in leases]) + for lease in leases]) + # ASAP jobs + if start_time == 0: + start_time = None + duration = max([int(lease['duration']) + for lease in leases]) + # schedule jobs + else: + end_time = max([int(lease['start_time']) + + int(lease['duration']) * 60 + for lease in leases]) + from math import floor + # minutes + duration = floor((end_time - start_time) / 60) nodes_list = [Xrn.unescape(Xrn(lease['component_id'].strip(), - type='node').get_leaf()) + type='node').get_leaf()) for lease in leases] # uniq hostnames nodes_list = list(set(nodes_list)) - from math import floor - duration = floor((end_time - start_time)/60) # minutes return nodes_list, start_time, duration - def _save_db_lease(self, job_id, slice_hrn): """ Save lease table row in SFA database """ lease_row = LeaseTable(job_id, @@ -178,7 +173,6 @@ class IotLabDriver(Driver): self.api.dbsession().add(lease_row) self.api.dbsession().commit() - def allocate(self, urn, rspec_string, expiration, options=None): """ Allocate method submit an experiment on Iot-LAB testbed with :