From 38dd8aa652861286afd5351c300d39bc644da63e Mon Sep 17 00:00:00 2001 From: Sandrine Avakian Date: Fri, 26 Jul 2013 14:12:00 +0200 Subject: [PATCH] Correcting fill_record_info to add information on nodes. --- sfa/iotlab/iotlabapi.py | 16 +++++++++------- sfa/iotlab/iotlabdriver.py | 21 +++++++++++++++++---- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/sfa/iotlab/iotlabapi.py b/sfa/iotlab/iotlabapi.py index 74e44dc1..95f982c6 100644 --- a/sfa/iotlab/iotlabapi.py +++ b/sfa/iotlab/iotlabapi.py @@ -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) diff --git a/sfa/iotlab/iotlabdriver.py b/sfa/iotlab/iotlabdriver.py index 04efeef6..7fa49574 100644 --- a/sfa/iotlab/iotlabdriver.py +++ b/sfa/iotlab/iotlabdriver.py @@ -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 -- 2.47.0