X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fiotlab%2Fiotlabshell.py;h=3b9f99303c82ac856da0891007a47aaf1c5a971c;hb=47090c0a12d8ccffa6d67692461da61a7b7f67e7;hp=558593a4caff8787884c2332f99134da806658a2;hpb=e3cef34c5f65d6c1eaa8cbd78703cc059cad0769;p=sfa.git diff --git a/sfa/iotlab/iotlabshell.py b/sfa/iotlab/iotlabshell.py index 558593a4..3b9f9930 100644 --- a/sfa/iotlab/iotlabshell.py +++ b/sfa/iotlab/iotlabshell.py @@ -18,7 +18,6 @@ class IotLABShell(object): user, passwd = auth.get_user_credentials() self.api = rest.Api(user, passwd) - def get_nodes(self): """ Get all OAR nodes @@ -48,13 +47,12 @@ class IotLABShell(object): nodes = experiment.info_experiment(self.api) except HTTPError as err: logger.warning("iotlashell get_nodes error %s" % err.reason) - return {'error' : err.reason} + return {'error': err.reason} for node in nodes['items']: nodes_dict[node['network_address']] = node return nodes_dict - - def get_users(self): + def get_users(self, email=None): """ Get all LDAP users :returns: users with LDAP attributes @@ -81,15 +79,17 @@ class IotLABShell(object): logger.warning("iotlashell get_users") users_dict = {} try: - users = self.api.method('admin/users') + if email: + users = self.api.method('admin/users?email=%s' % email) + else: + users = self.api.method('admin/users') except HTTPError as err: logger.warning("iotlashell get_users error %s" % err.reason) - return {'error' : err.reason} + return {'error': err.reason} for user in users: users_dict[user['email']] = user return users_dict - def reserve_nodes(self, login, exp_name, nodes_list, start_time, duration): """ @@ -97,6 +97,7 @@ class IotLABShell(object): """ # pylint:disable=W0212,R0913,E1123 logger.warning("iotlashell reserve_nodes") + logger.info("login=%s, exp_name=%s, nodes_list=%s, start_time=%s, duration=%s" % (login, exp_name, nodes_list, start_time, duration)) exp_file = helpers.FilesDict() _experiment = experiment._Experiment(exp_name, duration, start_time) _experiment.type = 'physical' @@ -108,12 +109,12 @@ class IotLABShell(object): files=exp_file) except HTTPError as err: logger.warning("iotlashell reserve_nodes error %s" % err.reason) - return {'error' : err.reason} - + logger.error(err) + return {'error': err.reason} def get_reserved_nodes(self): """ - Get all OAR jobs with state Waiting or Running. + Get all OAR jobs not terminated. :Example: {"total":"1907", @@ -132,38 +133,59 @@ class IotLABShell(object): """ logger.warning("iotlashell get_reserved_nodes") reserved_nodes_dict = {} - request = 'admin/experiments?state=Running,Waiting' + request = ('admin/experiments?state=' + 'Running,Waiting,toAckReservation,' + 'toLaunch,Launching') try: experiments = self.api.method(request) except HTTPError as err: logger.warning("iotlashell get_reserved_nodes error %s" % err.reason) - return {'error' : err.reason} + return {'error': err.reason} for exp in experiments['items']: - # BUG IN OAR REST API : job with reservation didn't return - # resources attribute list - # we use another request for finding job resources - exp_nodes = self.api.method('admin/experiments/%d' % exp['id']) - exp['resources'] = exp_nodes['nodes'] + # BUG ASAP jobs without date information + if exp['date'] == "as soon as possible": + exp['date'] = 0 reserved_nodes_dict[exp['id']] = exp return reserved_nodes_dict - def add_user(self, slice_user): """ Add LDAP user + { + "firstName":"loic", + "lastName":"test", + "email":"loic.test@lip6.fr", + "organization":"SFA", + "city":"To be defined", + "country":"To be defined", + "motivations":"SFA federation", + "category":"Academic", + "type": "SA", + "sshPublicKey": "ssh-rsa AAAAB3Nz..." + } """ + # pylint:disable=E1123 logger.warning("iotlashell add_user") - user = {"type" : "SA", # single account creation - "city" : "To be defined", - "country" : "To be defined", - "motivations" : "SFA federation"} + logger.warning("slice_user: %s" % slice_user) + if 'urn' in slice_user: + organization = slice_user['urn'] + else: + organization = "SFA federation" + # single account creation + user = {"type": "SA", + "city": "To be defined", + "country": "To be defined", + "motivations": "SFA federation", + "organization": organization, + "category":"Academic" + } email = slice_user['email'] user['email'] = email user['sshPublicKey'] = slice_user['keys'][0] # ex : onelab.inria - user['structure'] = slice_user['slice_record']['authority'] + user['structure'] = slice_user['urn'].split('+')[1].replace(':','.') email = (email.split('@'))[0] user['firstName'] = email.split('.')[0] try: @@ -172,7 +194,6 @@ class IotLABShell(object): user['lastName'] = email.split('.')[0] try: self.api.method('admin/users', 'post', - json=user) + json=user) except HTTPError as err: logger.warning("iotlashell add_user error %s" % err.reason) - \ No newline at end of file