# 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']))
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
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):
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
########## disabled users
def is_enabled (self, record):
- self.fill_record_info(record, deep=False)
+ # the incoming record was augmented already, so 'enabled' should be set
if record['type'] == 'user':
return record['enabled']
# only users can be disabled
return True
def augment_records_with_testbed_info (self, sfa_records):
- return self.fill_record_info (sfa_records, deep=True)
+ return self.fill_record_info (sfa_records)
##########
def register (self, sfa_record, hrn, pub_key):
return pl_record
####################
- def fill_record_info(self, records, deep=False):
+ def fill_record_info(self, records):
"""
Given a (list of) SFA record, fill in the PLC specific
and SFA specific fields in the record.
records = [records]
self.fill_record_pl_info(records)
- if deep:
- self.fill_record_hrns(records)
- self.fill_record_sfa_info(records)
+ self.fill_record_hrns(records)
+ self.fill_record_sfa_info(records)
return records
def fill_record_pl_info(self, records):
####################
# plcapi works by changes, compute what needs to be added/deleted
def update_relation (self, subject_type, target_type, subject_id, target_ids):
- # hard-wire the code for slice/user for now
+ # hard-wire the code for slice/user for now, could be smarter if needed
if subject_type =='slice' and target_type == 'user':
subject=self.GetSlices (subject_id)[0]
current_target_ids = subject['person_ids']