Correcting fill_record_info to add information on
authorSandrine Avakian <sandrine.avakian@inria.fr>
Fri, 26 Jul 2013 12:12:00 +0000 (14:12 +0200)
committerSandrine Avakian <sandrine.avakian@inria.fr>
Fri, 26 Jul 2013 12:12:00 +0000 (14:12 +0200)
nodes.

sfa/iotlab/iotlabapi.py
sfa/iotlab/iotlabdriver.py

index 74e44dc..95f982c 100644 (file)
@@ -347,7 +347,7 @@ class IotlabTestbedAPI():
         #del resa['resource_ids']
         return reservation_dict_list
 
-    def GetNodes(self, node_filter_dict = None, return_fields_list = None):
+    def GetNodes(self, node_filter_dict=None, return_fields_list=None):
         """
 
         Make a list of iotlab nodes and their properties from information
@@ -356,7 +356,9 @@ class IotlabTestbedAPI():
             'hrn','archi','mobile','hostname','site','boot_state','node_id',
             'radio','posx','posy','oar_id','posz'.
 
-        :param node_filter_dict: dictionnary of lists with node properties
+        :param node_filter_dict: dictionnary of lists with node properties. For
+            instance, if you want to look for a specific node with its hrn,
+            the node_filter_dict should be {'hrn': [hrn_of_the_node]}
         :type node_filter_dict: dict
         :param return_fields_list: list of specific fields the user wants to be
             returned.
@@ -368,7 +370,7 @@ class IotlabTestbedAPI():
         node_dict_by_id = self.oar.parser.SendRequest("GET_resources_full")
         node_dict_list = node_dict_by_id.values()
         logger.debug (" IOTLABDRIVER GetNodes  node_filter_dict %s \
-            return_fields_list %s "%(node_filter_dict, return_fields_list))
+            return_fields_list %s " % (node_filter_dict, return_fields_list))
         #No  filtering needed return the list directly
         if not (node_filter_dict or return_fields_list):
             return node_dict_list
@@ -382,7 +384,7 @@ class IotlabTestbedAPI():
                     for value in node_filter_dict[filter_key]:
                         for node in node_dict_list:
                             if node[filter_key] == value:
-                                if return_fields_list :
+                                if return_fields_list:
                                     tmp = {}
                                     for k in return_fields_list:
                                         tmp[k] = node[k]
@@ -1306,6 +1308,7 @@ class IotlabTestbedAPI():
                         \t lease['slice_hrn'] %s"
                              % (slice_filter, lease['slice_hrn']))
                 if lease['slice_hrn'] == slice_hrn:
+                    slicerec_dict['oar_job_id'] = lease['lease_id']
                     #Update lease dict with the slice record
                     if fixed_slicerec_dict:
                         fixed_slicerec_dict['oar_job_id'] = []
@@ -1317,7 +1320,6 @@ class IotlabTestbedAPI():
                     slicerec_dict['slice_hrn'] = lease['slice_hrn']
                     slicerec_dict['hrn'] = lease['slice_hrn']
                     slicerec_dict['user'] = lease['user']
-                    slicerec_dict['oar_job_id'] = lease['lease_id']
                     slicerec_dict.update(
                         {'list_node_ids':
                         {'hostname': lease['reserved_nodes']}})
@@ -1374,13 +1376,13 @@ class IotlabTestbedAPI():
                         #for reserved_node in lease['reserved_nodes']:
                         logger.debug("IOTLABDRIVER.PY  \tGetSlices lease %s "
                                      % (lease))
-
+                        slicerec_dict.update(fixed_slicerec_dict)
                         slicerec_dict.update({'node_ids':
                                               lease['reserved_nodes']})
                         slicerec_dict.update({'list_node_ids':
                                              {'hostname':
                                              lease['reserved_nodes']}})
-                        slicerec_dict.update(fixed_slicerec_dict)
+
                         #slicerec_dict.update({'hrn':\
                                     #str(fixed_slicerec_dict['slice_hrn'])})
                         #return_slicerec_dictlist.append(slicerec_dict)
index 04efeef..7fa4957 100644 (file)
@@ -80,12 +80,25 @@ class IotlabDriver(Driver):
 
         try:
             for record in record_list:
+
+                if str(record['type']) == 'node':
+                    # look for node info using GetNodes
+                    # the record is about one node only
+                    filter_dict = {'hrn': [record['hrn']]}
+                    node_info = self.iotlab_api.GetNodes(filter_dict)
+                    # the node_info is about one node only, but it is formatted
+                    # as a list
+                    record.update(node_info[0])
+                    logger.debug("IOTLABDRIVER.PY \t \
+                                  fill_record_info NODE" % (record))
+
                 #If the record is a SFA slice record, then add information
                 #about the user of this slice. This kind of
                 #information is in the Iotlab's DB.
                 if str(record['type']) == 'slice':
-                    if 'reg_researchers' in record and \
-                        isinstance(record['reg_researchers'], list):
+                    if 'reg_researchers' in record and isinstance(record
+                                                            ['reg_researchers'],
+                                                            list):
                         record['reg_researchers'] = \
                             record['reg_researchers'][0].__dict__
                         record.update(
@@ -119,8 +132,8 @@ class IotlabDriver(Driver):
                                          % (rec['oar_job_id']))
 
                             record['node_ids'] = [self.iotlab_api.root_auth +
-                                                  hostname for hostname in
-                                                  rec['node_ids']]
+                                                  '.' + hostname for hostname
+                                                  in rec['node_ids']]
                     except KeyError:
                         pass