X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fmanagers%2Fregistry_manager.py;h=d29aafef745d7233a4ed9b7e0c4b4bf31901691f;hb=b6de9285a970eccb9658a0078c49f76fb11af7cd;hp=da0b127b083d975b502a3b51a3cb431c2bf5d72f;hpb=080e7f90e2c66067aea94c96c4de68fc998e009b;p=sfa.git diff --git a/sfa/managers/registry_manager.py b/sfa/managers/registry_manager.py index da0b127b..d29aafef 100644 --- a/sfa/managers/registry_manager.py +++ b/sfa/managers/registry_manager.py @@ -8,8 +8,6 @@ import commands from sfa.util.faults import RecordNotFound, AccountNotEnabled, PermissionError, MissingAuthority, \ UnknownSfaType, ExistingRecord, NonExistingRecord from sfa.util.prefixTree import prefixTree -from sfa.util.record import SfaRecord -from sfa.util.table import SfaTable from sfa.util.xrn import Xrn, get_authority, hrn_to_urn, urn_to_hrn from sfa.util.plxrn import hrn_to_pl_login_base from sfa.util.version import version_core @@ -20,13 +18,16 @@ from sfa.trust.credential import Credential from sfa.trust.certificate import Certificate, Keypair, convert_public_key from sfa.trust.gid import create_uuid +from sfa.storage.record import SfaRecord +from sfa.storage.table import SfaTable + class RegistryManager: - def __init__ (self): pass + def __init__ (self, config): pass # The GENI GetVersion call - def GetVersion(self, api): - peers = dict ( [ (hrn,interface._ServerProxy__host) for (hrn,interface) in api.registries.iteritems() + def GetVersion(self, api, options): + peers = dict ( [ (hrn,interface.get_url()) for (hrn,interface) in api.registries.iteritems() if hrn != api.hrn]) xrn=Xrn(api.hrn) return version_core({'interface':'registry', @@ -55,6 +56,7 @@ class RegistryManager: # verify_cancreate_credential requires that the member lists # (researchers, pis, etc) be filled in + self.driver.augment_records_with_testbed_info (record) if not self.driver.is_enabled (record): raise AccountNotEnabled(": PlanetLab account %s is not enabled. Please contact your site PI" %(record['email'])) @@ -211,10 +213,20 @@ class RegistryManager: pkey = certificate.get_pubkey() gid = api.auth.hierarchy.create_gid(xrn, create_uuid(), pkey) return gid.save_to_string(save_parents=True) - + + #################### # utility for handling relationships among the SFA objects # given that the SFA db does not handle this sort of relationsships # it will rely on side-effects in the testbed to keep this persistent + + # subject_record describes the subject of the relationships + # ref_record contains the target values for the various relationships we need to manage + # (to begin with, this is just the slice x person relationship) + def update_relations (self, subject_record, ref_record): + type=subject_record['type'] + if type=='slice': + self.update_relation(subject_record, 'researcher', ref_record.get('researcher'), 'user') + # field_key is the name of one field in the record, typically 'researcher' for a 'slice' record # hrns is the list of hrns that should be linked to the subject from now on # target_type would be e.g. 'user' in the 'slice' x 'researcher' example @@ -271,8 +283,7 @@ class RegistryManager: gid = auth_info.get_gid_object() record.set_gid(gid.save_to_string(save_parents=True)) - # update testbed-specific data f needed - logger.info("Getting driver from manager=%s"%self) + # update testbed-specific data if needed pointer = self.driver.register (record, hrn, pub_key) record.set_pointer(pointer) @@ -280,8 +291,8 @@ class RegistryManager: record['record_id'] = record_id # update membership for researchers, pis, owners, operators - self.update_relation(record, 'researcher', record.get('researcher'), 'user') - + self.update_relations (record, record) + return record.get_gid_object().save_to_string(save_parents=True) def Update(self, api, record_dict): @@ -329,7 +340,7 @@ class RegistryManager: table.update(record) # update membership for researchers, pis, owners, operators - self.update_relation(record, 'researcher', new_record.get('researcher'), 'user') + self.update_relations (record, new_record) return 1