X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fimporter%2Fplimporter.py;h=d281c61479a09106f1e93202499399ea8c4daee7;hb=b54e90d0c3868fa5afb89ff784cba0d5d36265ad;hp=eeab8b6eb574aa84154d5ec68a159be24b74811b;hpb=80ed4dd40141136e7568bdf0d325d72270e28ab8;p=sfa.git diff --git a/sfa/importer/plimporter.py b/sfa/importer/plimporter.py index eeab8b6e..d281c614 100644 --- a/sfa/importer/plimporter.py +++ b/sfa/importer/plimporter.py @@ -24,7 +24,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.planetlab.plshell import PlShell @@ -115,8 +117,8 @@ class PlImporter: pointer=site['site_id'], authority=get_authority(site_hrn)) auth_record.just_created() - dbsession.add(auth_record) - dbsession.commit() + global_dbsession.add(auth_record) + global_dbsession.commit() self.logger.info("PlImporter: Imported authority (vini site) %s"%auth_record) self.remember_record ( site_record ) @@ -127,7 +129,7 @@ class PlImporter: shell = PlShell (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 @@ -145,7 +147,7 @@ class PlImporter: # Get all plc sites # retrieve only required stuf sites = shell.GetSites({'peer_id': None, 'enabled' : True}, - ['site_id','login_base','node_ids','slice_ids','person_ids',]) + ['site_id','login_base','node_ids','slice_ids','person_ids', 'name']) # create a hash of sites by login_base # sites_by_login_base = dict ( [ ( site['login_base'], site ) for site in sites ] ) # Get all plc users @@ -192,6 +194,9 @@ class PlImporter: # start importing for site in sites: + if site['name'].startswith('sfa:'): + continue + site_hrn = _get_site_hrn(interface_hrn, site) # import if hrn is not in list of existing hrns or if the hrn exists # but its not a site record @@ -206,8 +211,8 @@ class PlImporter: pointer=site['site_id'], 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("PlImporter: imported authority (site) : %s" % site_record) self.remember_record (site_record) except: @@ -242,8 +247,8 @@ class PlImporter: 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("PlImporter: imported node: %s" % node_record) self.remember_record (node_record) except: @@ -297,8 +302,7 @@ class PlImporter: plc_keys = keys_by_person_id.get(person['person_id'],[]) if not user_record: (pubkey,pkey) = init_person_key (person, plc_keys ) - person_gid = self.auth_hierarchy.create_gid(person_urn, create_uuid(), pkey) - person_gid.set_email(person['email']) + person_gid = self.auth_hierarchy.create_gid(person_urn, create_uuid(), pkey, email=person['email']) user_record = RegUser (hrn=person_hrn, gid=person_gid, pointer=person['person_id'], authority=get_authority(person_hrn), @@ -308,8 +312,8 @@ class PlImporter: 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("PlImporter: imported person: %s" % user_record) self.remember_record ( user_record ) else: @@ -354,9 +358,10 @@ class PlImporter: else: user_record.reg_keys=[ RegKey (pubkey['key'], pubkey['key_id'])] user_record.gid = person_gid + user_record.just_updated() self.logger.info("PlImporter: updated person: %s" % user_record) user_record.email = person['email'] - dbsession.commit() + global_dbsession.commit() user_record.stale=False # accumulate PIs - PLCAPI has a limitation that when someone has PI role # this is valid for all sites she is in.. @@ -373,8 +378,8 @@ class PlImporter: # being improperly handled, and where the whole loop on persons # could be performed twice with the same person... # so hopefully we do not need to eliminate duplicates explicitly here anymore - site_record.reg_pis = site_pis - dbsession.commit() + site_record.reg_pis = list(set(site_pis)) + global_dbsession.commit() # import slices for slice_id in site['slice_ids']: @@ -393,8 +398,8 @@ class PlImporter: 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("PlImporter: imported slice: %s" % slice_record) self.remember_record ( slice_record ) except: @@ -407,7 +412,7 @@ class PlImporter: # record current users affiliated with the slice slice_record.reg_researchers = \ [ self.locate_by_type_pointer ('user',user_id) for user_id in slice['person_ids'] ] - dbsession.commit() + global_dbsession.commit() slice_record.stale=False ### remove stale records @@ -429,5 +434,5 @@ class PlImporter: self.logger.warning("stale not found with %s"%record) if stale: self.logger.info("PlImporter: deleting stale record: %s" % record) - dbsession.delete(record) - dbsession.commit() + global_dbsession.delete(record) + global_dbsession.commit()