git://git.onelab.eu
/
sfa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
a little nicer wrt pep8
[sfa.git]
/
sfa
/
iotlab
/
iotlabdriver.py
diff --git
a/sfa/iotlab/iotlabdriver.py
b/sfa/iotlab/iotlabdriver.py
index
5746fed
..
a820fc6
100644
(file)
--- 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
from sfa.iotlab.iotlabaggregate import IotLABAggregate
from sfa.iotlab.iotlablease import LeaseTable
+
class IotLabDriver(Driver):
"""
SFA driver for Iot-LAB testbed
class IotLabDriver(Driver):
"""
SFA driver for Iot-LAB testbed
@@
-28,31
+29,26
@@
class IotLabDriver(Driver):
""" Not used and need by SFA """
pass
""" 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 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 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
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")
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)
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 delete(self, urns, options=None):
logger.warning("iotlabdriver delete : not implemented")
geni_slivers = []
return geni_slivers
-
def aggregate_version(self):
def aggregate_version(self):
- logger.warning("iotlabdriver aggregate_version")
version_manager = VersionManager()
ad_rspec_versions = []
request_rspec_versions = []
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}
'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:
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
rspec = aggregate.list_resources(version=version, options=options)
return rspec
-
def describe(self, urns, version, options=None):
logger.warning("iotlabdriver describe")
if not options:
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)
aggregate = IotLABAggregate(self)
return aggregate.describe(urns, version=version, options=options)
-
def status(self, urns, options=None):
logger.warning("iotlabdriver status")
aggregate = IotLABAggregate(self)
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
'geni_slivers': desc['geni_slivers']}
return status
-
- def _get_users(self):
+ def _get_users(self, email=None):
""" Get all users """
""" Get all users """
- ret = self.shell.get_users()
+ ret = self.shell.get_users(
email
)
if 'error' in ret:
return None
return ret
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
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)
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
if users and email in users:
return users[email]['login']
else:
return None
-
@classmethod
def _get_experiment(cls, rspec):
"""
@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:
<rspec>
:Example:
<rspec>
@@
-155,20
+143,27
@@
class IotLabDriver(Driver):
"""
leases = rspec.version.get_leases()
start_time = min([int(lease['start_time'])
"""
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(),
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))
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
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,
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()
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 :
def allocate(self, urn, rspec_string, expiration, options=None):
"""
Allocate method submit an experiment on Iot-LAB testbed with :
@@
-200,6
+194,7
@@
class IotLabDriver(Driver):
# parse rspec
rspec = RSpec(rspec_string)
# parse rspec
rspec = RSpec(rspec_string)
+ logger.warning(options)
caller_hrn = options.get('actual_caller_hrn', [])
geni_users = options.get('geni_users', [])
caller_user = [user for user in geni_users if
caller_hrn = options.get('actual_caller_hrn', [])
geni_users = options.get('geni_users', [])
caller_user = [user for user in geni_users if
@@
-212,11
+207,12
@@
class IotLabDriver(Driver):
if login:
nodes_list, start_time, duration = \
self._get_experiment(rspec)
if login:
nodes_list, start_time, duration = \
self._get_experiment(rspec)
+ # [0-9A-Za-z_] with onelab.inria.test_iotlab
+ exp_name = '_'.join((xrn.hrn.replace('\\.','')).split('.'))
logger.warning("iotlabdriver allocate submit OAR job :"
" %s %s %s %s" %
logger.warning("iotlabdriver allocate submit OAR job :"
" %s %s %s %s" %
- (xrn.hrn, start_time, duration, nodes_list))
- # [0-9A-Za-z_] with onelab.inria.test_iotlab
- exp_name = '_'.join((xrn.hrn).split('.'))
+ (exp_name, start_time, duration, nodes_list))
+
# submit OAR job
ret = self.shell.reserve_nodes(login,
exp_name,
# submit OAR job
ret = self.shell.reserve_nodes(login,
exp_name,