+ parts = slicename.split("_")
+ login_base = parts[0]
+ # if site doesnt exist add it
+ sites = self.shell.GetSites(self.auth, [login_base])
+ if not sites:
+ authority = get_authority(slice_hrn)
+ site_records = self.registry.resolve(self.credential, authority)
+ site_record = {}
+ if not site_records:
+ raise RecordNotFound(authority)
+ site_record = site_records[0]
+ site_info = site_record.as_dict()
+ site = site_info['pl_info']
+
+ # add the site
+ site.pop('site_id')
+ site_id = self.shell.AddSite(self.auth, site)
+ else:
+ site = sites[0]
+
+ self.shell.AddSlice(self.auth, slice)
+
+ # get the list of valid slice users from the registry and make
+ # they are added to the slice
+ geni_info = slice_info['geni_info']
+ researchers = geni_info['researcher']
+ for researcher in researchers:
+ person_record = {}
+ person_records = self.registry.resolve(self.credential, researcher)
+ for record in person_records:
+ if record.get_type() in ['user']:
+ person_record = record
+ if not person_record:
+ pass
+ person_dict = person_record.as_dict()['pl_info']
+ persons = self.shell.GetPersons(self.auth, [person_dict['email']], ['person_id', 'key_ids'])
+
+ # Create the person record
+ if not persons:
+ self.shell.AddPerson(self.auth, person_dict)
+ key_ids = []
+ else:
+ key_ids = persons[0]['key_ids']
+
+ self.shell.AddPersonToSlice(self.auth, person_dict['email'], slicename)
+
+ # Get this users local keys
+ keylist = self.shell.GetKeys(self.auth, key_ids, ['key'])
+ keys = [key['key'] for key in keylist]
+
+ # add keys that arent already there
+ for personkey in person_dict['keys']:
+ if personkey not in keys:
+ key = {'key_type': 'ssh', 'key': personkey}
+ self.shell.AddPersonKey(self.auth, person_dict['email'], key)
+