FIT IoT-Lab - fixed create user on the fly if coming from trusted Federation
[sfa.git] / sfa / iotlab / iotlabshell.py
index 558593a..ac60097 100644 (file)
@@ -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,12 +47,11 @@ 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):
         """
         Get all LDAP users
@@ -84,12 +82,11 @@ class IotLABShell(object):
             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):
         """
@@ -108,12 +105,11 @@ class IotLABShell(object):
                                    files=exp_file)
         except HTTPError as err:
             logger.warning("iotlashell reserve_nodes error %s" % err.reason)
-            return {'error' : err.reason}
-
+            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 +128,38 @@ 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
         """
         # 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"}
+        # single account creation
+        user = {"type": "SA",
+                "city": "To be defined",
+                "country": "To be defined",
+                "motivations": "SFA federation"}
         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 +168,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