X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fplc%2FsfaImport.py;h=8859c00875cc43a395c6d89242e6dcfea331af0f;hb=6f8fbddbe8ba6a0b6304655d80df53ab813d9001;hp=fd8c08b92e8973da1a4784652515d5670b96ded9;hpb=360779d7a069ccccf753ed8d55c09576f486d5c0;p=sfa.git diff --git a/sfa/plc/sfaImport.py b/sfa/plc/sfaImport.py index fd8c08b9..8859c008 100644 --- a/sfa/plc/sfaImport.py +++ b/sfa/plc/sfaImport.py @@ -50,11 +50,11 @@ def cleanup_string(str): class sfaImport: - def __init__(self): + def __init__(self, logger=None): + self.logger = logger self.AuthHierarchy = Hierarchy() - self.TrustedRoots = TrustedRootList() - self.config = Config() + self.TrustedRoots = TrustedRootList(Config.get_trustedroots_dir(self.config)) self.plc_auth = self.config.get_plc_auth() self.root_auth = self.config.SFA_REGISTRY_ROOT_AUTH self.level1_auth = self.config.SFA_REGISTRY_LEVEL1_AUTH @@ -76,6 +76,7 @@ class sfaImport: # if auth records for this hrn dont exist, create it if not AuthHierarchy.auth_exists(hrn): + trace("Import: creating top level authorites", self.logger) AuthHierarchy.create_auth(hrn) @@ -95,7 +96,8 @@ class sfaImport: if not auth_record: auth_record = GeniRecord(hrn=hrn, gid=auth_info.get_gid_object(), type="authority", pointer=-1) - trace(" inserting authority record for " + hrn) + auth_record['authority'] = get_authority(auth_record['hrn']) + trace("Import: inserting authority record for " + hrn, self.logger) table.insert(auth_record) @@ -107,7 +109,7 @@ class sfaImport: if len(hrn) > 64: hrn = hrn[:64] - trace("Import: importing person " + hrn) + trace("Import: importing person " + hrn, self.logger) key_ids = [] if 'key_ids' in person and person['key_ids']: key_ids = person["key_ids"] @@ -120,7 +122,7 @@ class sfaImport: pkey = Keypair(create=True) else: # the user has no keys - trace(" person " + hrn + " does not have a PL public key") + trace(" person " + hrn + " does not have a PL public key", self.logger) # if a key is unavailable, then we still need to put something in the # user's GID. So make one up. pkey = Keypair(create=True) @@ -129,11 +131,12 @@ class sfaImport: person_gid = AuthHierarchy.create_gid(hrn, create_uuid(), pkey) table = GeniTable() person_record = GeniRecord(hrn=hrn, gid=person_gid, type="user", pointer=person['person_id']) + person_record['authority'] = get_authority(person_record['hrn']) existing_records = table.find({'hrn': hrn, 'type': 'user', 'pointer': person['person_id']}) if not existing_records: table.insert(person_record) else: - trace("Import: %s exists, updating " % hrn) + trace("Import: %s exists, updating " % hrn, self.logger) existing_record = existing_records[0] person_record['record_id'] = existing_record['record_id'] table.update(person_record) @@ -144,21 +147,22 @@ class sfaImport: slicename = cleanup_string(slicename) if not slicename: - error("Import_Slice: failed to parse slice name " + slice['name']) + error("Import_Slice: failed to parse slice name " + slice['name'], self.logger) return hrn = parent_hrn + "." + slicename - trace("Import: importing slice " + hrn) + trace("Import: importing slice " + hrn, self.logger) pkey = Keypair(create=True) slice_gid = AuthHierarchy.create_gid(hrn, create_uuid(), pkey) slice_record = GeniRecord(hrn=hrn, gid=slice_gid, type="slice", pointer=slice['slice_id']) + slice_record['authority'] = get_authority(slice_record['hrn']) table = GeniTable() existing_records = table.find({'hrn': hrn, 'type': 'slice', 'pointer': slice['slice_id']}) if not existing_records: table.insert(slice_record) else: - trace("Import: %s exists, updating " % hrn) + trace("Import: %s exists, updating " % hrn, self.logger) existing_record = existing_records[0] slice_record['record_id'] = existing_record['record_id'] table.update(slice_record) @@ -169,11 +173,11 @@ class sfaImport: nodename = cleanup_string(nodename) if not nodename: - error("Import_node: failed to parse node name " + node['hostname']) + error("Import_node: failed to parse node name " + node['hostname'], self.logger) return hrn = parent_hrn + "." + nodename - trace("Import: importing node " + hrn) + trace("Import: importing node " + hrn, self.logger) # ASN.1 will have problems with hrn's longer than 64 characters if len(hrn) > 64: hrn = hrn[:64] @@ -183,11 +187,12 @@ class sfaImport: pkey = Keypair(create=True) node_gid = AuthHierarchy.create_gid(hrn, create_uuid(), pkey) node_record = GeniRecord(hrn=hrn, gid=node_gid, type="node", pointer=node['node_id']) + node_record['authority'] = get_authority(node_record['hrn']) existing_records = table.find({'hrn': hrn, 'type': 'node', 'pointer': node['node_id']}) if not existing_records: table.insert(node_record) else: - trace("Import: %s exists, updating " % hrn) + trace("Import: %s exists, updating " % hrn, self.logger) existing_record = existing_records[0] node_record['record_id'] = existing_record['record_id'] table.update(node_record) @@ -206,14 +211,14 @@ class sfaImport: # internet2 nodes. This is a special operation for some vini # sites only if ".vini" in parent_hrn and parent_hrn.endswith('vini'): - if sitename.startswith("ii"): - sitename = sitename.replace("ii", "") + if sitename.startswith("i2"): + #sitename = sitename.replace("ii", "") hrn = ".".join([parent_hrn, "internet2", sitename]) elif sitename.startswith("nlr"): + #sitename = sitename.replace("nlr", "") hrn = ".".join([parent_hrn, "internet2", sitename]) - sitename = sitename.replace("nlr", "") - trace("Import_Site: importing site " + hrn) + trace("Import: importing site " + hrn, self.logger) # create the authority if not AuthHierarchy.auth_exists(hrn): @@ -223,19 +228,23 @@ class sfaImport: table = GeniTable() auth_record = GeniRecord(hrn=hrn, gid=auth_info.get_gid_object(), type="authority", pointer=site['site_id']) + auth_record['authority'] = get_authority(auth_record['hrn']) existing_records = table.find({'hrn': hrn, 'type': 'authority', 'pointer': site['site_id']}) if not existing_records: table.insert(auth_record) else: - trace("Import: %s exists, updating " % hrn) - existing_record = existing_record[0] + trace("Import: %s exists, updating " % hrn, self.logger) + existing_record = existing_records[0] auth_record['record_id'] = existing_record['record_id'] table.update(auth_record) + return hrn + def delete_record(self, hrn, type): # delete the record table = GeniTable() record_list = table.find({'type': type, 'hrn': hrn}) for record in record_list: + trace("Import: Removing record %s %s" % (type, hrn), self.logger) table.remove(record)