peer = self.get_peer(hrn)
spec = Rspec(rspec)
- # Get the slice record from geni
+ # Get the slice record from sfa
slice = {}
slice_record = None
registries = Registries(self.api)
registry = registries[self.api.hrn]
credential = self.api.getCredential()
- records = registry.resolve(credential, hrn)
- for record in records:
+ slice_records = registry.resolve(credential, hrn)
+ for record in slice_records:
if record.get_type() in ['slice']:
slice_record = record.as_dict()
if not slice_record:
- raise RecordNotFound(hrn)
-
+ raise RecordNotFound(hrn)
+
+ # Get the slice's site record
+ authority = get_authority(hrn)
+ site_records = registry.resolve(credential, authority)
+ site = {}
+ for site_record in site_records:
+ if site_record.get_type() in ['authority']:
+ site = site_record.as_dict()
+ if not site:
+ raise RecordNotFound(authority)
+ remote_site_id = site.pop('site_id')
+
# Make sure slice exists at plc, if it doesnt add it
slicename = hrn_to_pl_slicename(hrn)
slices = self.api.plshell.GetSlices(self.api.plauth, [slicename], ['slice_id', 'node_ids', 'site_id'] )
sites = self.api.plshell.GetSites(self.api.plauth, [login_base])
if not slices:
if not sites:
- authority = get_authority(hrn)
- site_records = registry.resolve(credential, authority)
- site_record = {}
- if not site_records:
- raise RecordNotFound(authority)
- site_record = site_records[0]
- site = site_record.as_dict()
-
- # add the site
- remote_site_id = site.pop('site_id')
+ # add the site
site_id = self.api.plshell.AddSite(self.api.plauth, site)
# this belongs to a peer
if peer:
self.api.plshell.BindObjectToPeer(self.api.plauth, 'site', site_id, peer, remote_site_id)
else:
- site = sites[0]
- site_id = site['site_id']
- remote_site_id = site['peer_site_id']
+ site_id = sites[0]['site_id']
+ remote_site_id = sites[0]['peer_site_id']
# create slice object
slice_fields = {}
self.api.plshell.UpdatePerson(self.api.plauth, person_id, {'enabled' : True})
if peer:
- self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_record['pointer'])
+ self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_dict['pointer'])
key_ids = []
else:
person_id = persons[0]['person_id']
self.api.plshell.AddPersonToSlice(self.api.plauth, person_dict['email'], slicename)
self.api.plshell.AddPersonToSite(self.api.plauth, person_dict['email'], site_id)
if peer:
- self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_record['pointer'])
+ self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_dict['pointer'])
self.api.plshell.BindObjectToPeer(self.api.plauth, 'site', site_id, peer, remote_site_id)
# Get this users local keys
keys = [key['key'] for key in keylist]
# add keys that arent already there
- key_ids=person_record['key_ids']
+ key_ids=person_dict['key_ids']
for personkey in person_dict['keys']:
if personkey not in keys:
key = {'key_type': 'ssh', 'key': personkey}
self.api.plshell.UnBindObjectFromPeer(self.api.plauth, 'person', person_id, peer)
key_id=self.api.plshell.AddPersonKey(self.api.plauth, person_dict['email'], key)
if peer:
- self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_record['pointer'])
+ self.api.plshell.BindObjectToPeer(self.api.plauth, 'person', person_id, peer, person_dict['pointer'])
self.api.plshell.BindObjectToPeer(self.api.plauth, 'key', key_id, peer, key_ids.pop(0))
# find out where this slice is currently running