X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fimporter%2Fnitosimporter.py;h=425be7789cc767d3b29f4d214967140ceeb8c38a;hb=9e1847550776ca28b60869d8ea42daa89c226ba7;hp=3a8f90b176cfbe739f08c08bcf78c18fa8738b09;hpb=92b229d72b4e0a3fdd25c91e87d69d77102f7765;p=sfa.git diff --git a/sfa/importer/nitosimporter.py b/sfa/importer/nitosimporter.py index 3a8f90b1..425be778 100644 --- a/sfa/importer/nitosimporter.py +++ b/sfa/importer/nitosimporter.py @@ -7,7 +7,9 @@ from sfa.util.xrn import Xrn, get_leaf, get_authority, hrn_to_urn from sfa.trust.gid import create_uuid from sfa.trust.certificate import convert_public_key, Keypair -from sfa.storage.alchemy import dbsession +# using global alchemy.session() here is fine +# as importer is on standalone one-shot process +from sfa.storage.alchemy import global_dbsession from sfa.storage.model import RegRecord, RegAuthority, RegSlice, RegNode, RegUser, RegKey from sfa.nitos.nitosshell import NitosShell @@ -83,7 +85,7 @@ class NitosImporter: shell = NitosShell (config) ######## retrieve all existing SFA objects - all_records = dbsession.query(RegRecord).all() + all_records = global_dbsession.query(RegRecord).all() # create hash by (type,hrn) # we essentially use this to know if a given record is already known to SFA @@ -122,7 +124,7 @@ class NitosImporter: # Get all nitos nodes nodes = shell.getNodes({}, []) # create hash by node_id - nodes_by_id = dict ( [ (node['id'], node) for node in nodes ] ) + nodes_by_id = dict ( [ (node['node_id'], node) for node in nodes ] ) # Get all nitos slices slices = shell.getSlices({}, []) # create hash by slice_id @@ -146,8 +148,8 @@ class NitosImporter: pointer=0, authority=get_authority(site_hrn)) site_record.just_created() - dbsession.add(site_record) - dbsession.commit() + global_dbsession.add(site_record) + global_dbsession.commit() self.logger.info("NitosImporter: imported authority (site) : %s" % site_record) self.remember_record (site_record) except: @@ -164,7 +166,7 @@ class NitosImporter: for node in nodes: site_auth = get_authority(site_hrn) site_name = site['name'] - node_hrn = hostname_to_hrn(site_auth, site_name, node['name']) + node_hrn = hostname_to_hrn(site_auth, site_name, node['hostname']) # xxx this sounds suspicious if len(node_hrn) > 64: node_hrn = node_hrn[:64] node_record = self.locate_by_type_hrn ( 'node', node_hrn ) @@ -174,11 +176,11 @@ class NitosImporter: urn = hrn_to_urn(node_hrn, 'node') node_gid = self.auth_hierarchy.create_gid(urn, create_uuid(), pkey) node_record = RegNode (hrn=node_hrn, gid=node_gid, - pointer =node['id'], + pointer =node['node_id'], authority=get_authority(node_hrn)) node_record.just_created() - dbsession.add(node_record) - dbsession.commit() + global_dbsession.add(node_record) + global_dbsession.commit() self.logger.info("NitosImporter: imported node: %s" % node_record) self.remember_record (node_record) except: @@ -236,8 +238,8 @@ class NitosImporter: else: self.logger.warning("No key found for user %s"%user_record) user_record.just_created() - dbsession.add (user_record) - dbsession.commit() + global_dbsession.add (user_record) + global_dbsession.commit() self.logger.info("NitosImporter: imported user: %s" % user_record) self.remember_record ( user_record ) else: @@ -245,15 +247,20 @@ class NitosImporter: # if user's primary key has changed then we need to update the # users gid by forcing an update here sfa_keys = user_record.reg_keys - def key_in_list (key,sfa_keys): - for reg_key in sfa_keys: - if reg_key.key==key: return True + + def sfa_key_in_list (sfa_key,nitos_user_keys): + for nitos_key in nitos_user_keys: + if nitos_key==sfa_key: return True return False - # is there a new key in NITOS ? + # are all the SFA keys known to nitos ? new_keys=False - for key in user['keys']: - if not key_in_list (key,sfa_keys): - new_keys = True + if not sfa_keys and user['keys']: + new_keys = True + else: + for sfa_key in sfa_keys: + if not sfa_key_in_list (sfa_key.key,user['keys']): + new_keys = True + if new_keys: (pubkey,pkey) = init_user_key (user) user_gid = self.auth_hierarchy.create_gid(user_urn, create_uuid(), pkey) @@ -261,9 +268,11 @@ class NitosImporter: user_record.reg_keys=[] else: user_record.reg_keys=[ RegKey (pubkey)] + user_record.gid = user_gid + user_record.just_updated() self.logger.info("NitosImporter: updated user: %s" % user_record) user_record.email = user['email'] - dbsession.commit() + global_dbsession.commit() user_record.stale=False except: self.logger.log_exc("NitosImporter: failed to import user %s %s"%(user['user_id'],user['email'])) @@ -282,8 +291,8 @@ class NitosImporter: pointer=slice['slice_id'], authority=get_authority(slice_hrn)) slice_record.just_created() - dbsession.add(slice_record) - dbsession.commit() + global_dbsession.add(slice_record) + global_dbsession.commit() self.logger.info("NitosImporter: imported slice: %s" % slice_record) self.remember_record ( slice_record ) except: @@ -294,8 +303,8 @@ class NitosImporter: pass # record current users affiliated with the slice slice_record.reg_researchers = \ - [ self.locate_by_type_pointer ('user',int(user_id)) for user_id in slice['user_id'] ] - dbsession.commit() + [ self.locate_by_type_pointer ('user',int(user_id)) for user_id in slice['user_ids'] ] + global_dbsession.commit() slice_record.stale=False @@ -315,12 +324,7 @@ class NitosImporter: self.logger.warning("stale not found with %s"%record) if stale: self.logger.info("NitosImporter: deleting stale record: %s" % record) - dbsession.delete(record) - dbsession.commit() - + global_dbsession.delete(record) + global_dbsession.commit() -if __name__ == "__main__": - from sfa.util.sfalogging import logger - nitosimporter = NitosImporter("pla.nitos", logger) - nitosimporter.run(None)