X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fplc%2Fapi.py;h=200d05c542084aa7666ac33c0b7b52acfd3d599e;hb=db091e73c33c373b7f6c2c96bd2caf6a2acf0178;hp=d4781f3e46920c70058ea1028781ed83ea3c2de7;hpb=140300a38da236f8c88f2a85fd1699d300fa9024;p=sfa.git diff --git a/sfa/plc/api.py b/sfa/plc/api.py index d4781f3e..200d05c5 100644 --- a/sfa/plc/api.py +++ b/sfa/plc/api.py @@ -12,7 +12,7 @@ import xmlrpclib from sfa.util.faults import * from sfa.util.api import * from sfa.util.config import * -from sfa.util.sfalogging import sfa_logger +from sfa.util.sfalogging import logger import sfa.util.xmlrpcprotocol as xmlrpcprotocol from sfa.trust.auth import Auth from sfa.trust.rights import Right, Rights, determine_rights @@ -99,13 +99,13 @@ class SfaAPI(BaseAPI): self.credential = None # Initialize the PLC shell only if SFA wraps a myPLC rspec_type = self.config.get_aggregate_type() - if (rspec_type == 'pl' or rspec_type == 'vini' or rspec_type == 'eucalyptus'): + if (rspec_type == 'pl' or rspec_type == 'vini' or \ + rspec_type == 'eucalyptus' or rspec_type == 'max'): self.plshell = self.getPLCShell() self.plshell_version = "4.3" self.hrn = self.config.SFA_INTERFACE_HRN self.time_format = "%Y-%m-%d %H:%M:%S" - self.logger=sfa_logger() def getPLCShell(self): self.plauth = {'Username': self.config.SFA_PLC_USER, @@ -339,7 +339,7 @@ class SfaAPI(BaseAPI): # fill in key info if record['type'] == 'user': if 'key_ids' not in record: - self.logger.info("user record has no 'key_ids' - need to import from myplc ?") + logger.info("user record has no 'key_ids' - need to import from myplc ?") else: pubkeys = [keys[key_id]['key'] for key_id in record['key_ids'] if key_id in keys] record['keys'] = pubkeys @@ -385,7 +385,6 @@ class SfaAPI(BaseAPI): # convert ids to hrns for record in records: - # get all relevant data type = record['type'] pointer = record['pointer'] @@ -419,7 +418,7 @@ class SfaAPI(BaseAPI): if site_id in sites] site_hrns = [".".join([auth_hrn, lbase]) for lbase in login_bases] record['sites'] = site_hrns - + return records def fill_record_sfa_info(self, records): @@ -477,44 +476,50 @@ class SfaAPI(BaseAPI): # fill sfa info for record in records: # skip records with no pl info (top level authorities) - if record['pointer'] == -1: - continue + #if record['pointer'] == -1: + # continue sfa_info = {} type = record['type'] if (type == "slice"): # all slice users are researchers + record['geni_urn'] = hrn_to_urn(record['hrn'], 'slice') record['PI'] = [] record['researcher'] = [] - for person_id in record['person_ids']: + for person_id in record.get('person_ids', []): hrns = [person['hrn'] for person in persons[person_id]] record['researcher'].extend(hrns) # pis at the slice's site - pl_pis = site_pis[record['site_id']] - pi_ids = [pi['person_id'] for pi in pl_pis] - for person_id in pi_ids: - hrns = [person['hrn'] for person in persons[person_id]] - record['PI'].extend(hrns) - record['geni_urn'] = hrn_to_urn(record['hrn'], 'slice') - record['geni_creator'] = record['PI'] - - elif (type == "authority"): - record['PI'] = [] - record['operator'] = [] - record['owner'] = [] - for pointer in record['person_ids']: - if pointer not in persons or pointer not in pl_persons: - # this means there is not sfa or pl record for this user - continue - hrns = [person['hrn'] for person in persons[pointer]] - roles = pl_persons[pointer]['roles'] - if 'pi' in roles: + if 'site_id' in record and record['site_id'] in site_pis: + pl_pis = site_pis[record['site_id']] + pi_ids = [pi['person_id'] for pi in pl_pis] + for person_id in pi_ids: + hrns = [person['hrn'] for person in persons[person_id]] record['PI'].extend(hrns) - if 'tech' in roles: - record['operator'].extend(hrns) - if 'admin' in roles: - record['owner'].extend(hrns) - # xxx TODO: OrganizationName + record['geni_creator'] = record['PI'] + + elif (type.startswith("authority")): + record['url'] = None + if record['hrn'] in self.aggregates: + record['url'] = self.aggregates[record['hrn']].url + + if record['pointer'] != -1: + record['PI'] = [] + record['operator'] = [] + record['owner'] = [] + for pointer in record.get('person_ids', []): + if pointer not in persons or pointer not in pl_persons: + # this means there is not sfa or pl record for this user + continue + hrns = [person['hrn'] for person in persons[pointer]] + roles = pl_persons[pointer]['roles'] + if 'pi' in roles: + record['PI'].extend(hrns) + if 'tech' in roles: + record['operator'].extend(hrns) + if 'admin' in roles: + record['owner'].extend(hrns) + # xxx TODO: OrganizationName elif (type == "node"): sfa_info['dns'] = record.get("hostname", "") # xxx TODO: URI, LatLong, IP, DNS