def verify_slice(self, slice_hrn, slice_record, sfa_peer, expiration, options={}): #top_auth_hrn = top_auth(slice_hrn) #site_hrn = '.'.join(slice_hrn.split('.')[:-1]) #slice_part = slice_hrn.split('.')[-1] #if top_auth_hrn == self.driver.hrn: # login_base = slice_hrn.split('.')[-2][:12] #else: # login_base = hash_loginbase(site_hrn) #slice_name = '_'.join([login_base, slice_part]) plxrn = PlXrn(xrn=slice_hrn) slice_hrn = plxrn.get_hrn() type = plxrn.get_type() site_hrn = plxrn.get_authority_hrn() authority_name = plxrn.pl_authname() slicename = plxrn.pl_slicename() login_base = plxrn.pl_login_base() slices = self.driver.shell.GetSlices({'peer_id': None}, ['slice_id', 'name', 'hrn']) # Filter slices by HRN slice_exists = [slice for slice in slices if slice['hrn'] == slice_hrn] expires = int(datetime_to_epoch(utcparse(expiration))) if not slice_exists: if slice_record: url = slice_record.get('url', slice_hrn) description = slice_record.get('description', slice_hrn) else: url = slice_hrn description = slice_hrn slice = { 'name': slice_name, 'url': url, 'description': description } # add the slice slice['slice_id'] = self.driver.shell.AddSlice(slice) # set the slice HRN self.driver.shell.SetSliceHrn(int(slice['slice_id']), slice_hrn) # Tag this as created through SFA self.driver.shell.SetSliceSfaCreated(int(slice['slice_id']), 'True') # set the expiration self.driver.shell.UpdateSlice(int(slice['slice_id']), {'expires': expires}) else: slice = slice_exists[0] #Update expiration if necessary if slice.get('expires', None) != expires: self.driver.shell.UpdateSlice(int(slice['slice_id']), {'expires': expires}) return self.driver.shell.GetSlices(int(slice['slice_id']))[0]
def verify_site(self, slice_xrn, slice_record={}, sfa_peer=None, options={}): #(slice_hrn, type) = urn_to_hrn(slice_xrn) #top_auth_hrn = top_auth(slice_hrn) #site_hrn = '.'.join(slice_hrn.split('.')[:-1]) #if top_auth_hrn == self.driver.hrn: # login_base = slice_hrn.split('.')[-2][:12] #else: # login_base = hash_loginbase(site_hrn) plxrn = PlXrn(xrn=slice_xrn) slice_hrn = plxrn.get_hrn() type = plxrn.get_type() site_hrn = plxrn.get_authority_hrn() authority_name = plxrn.pl_authname() slicename = plxrn.pl_slicename() login_base = plxrn.pl_login_base() sites = self.driver.shell.GetSites( {'peer_id': None}, ['site_id', 'name', 'abbreviated_name', 'login_base', 'hrn']) # filter sites by hrn site_exists = [site for site in sites if site['hrn'] == site_hrn] if not site_exists: # create new site record site = { 'name': 'sfa:%s' % site_hrn, 'abbreviated_name': site_hrn, 'login_base': login_base, 'max_slices': 100, 'max_slivers': 1000, 'enabled': True, 'peer_site_id': None } site['site_id'] = self.driver.shell.AddSite(site) # Set site HRN self.driver.shell.SetSiteHrn(int(site['site_id']), site_hrn) # Tag this as created through SFA self.driver.shell.SetSiteSfaCreated(int(site['site_id']), 'True') # exempt federated sites from monitor policies self.driver.shell.AddSiteTag(int(site['site_id']), 'exempt_site_until', "20200101") else: site = site_exists[0] return site
def get_slivers(self, urns, options=None): if options is None: options={} names = set() slice_ids = set() node_ids = [] slice_hrn = None for urn in urns: xrn = PlXrn(xrn=urn) if xrn.type == 'sliver': # id: slice_id-node_id try: sliver_id_parts = xrn.get_sliver_id_parts() slice_id = int(sliver_id_parts[0]) node_id = int(sliver_id_parts[1]) slice_ids.add(slice_id) node_ids.append(node_id) except ValueError: pass else: slice_hrn = xrn.get_hrn() filter = {} filter['peer_id'] = None if slice_ids: filter['slice_id'] = list(slice_ids) # get all slices all_slices = self.driver.shell.GetSlices(filter, ['slice_id', 'name', 'hrn', 'person_ids', 'node_ids', 'slice_tag_ids', 'expires']) if slice_hrn: slices = [slice for slice in all_slices if slice['hrn'] == slice_hrn] else: slices = all_slices if not slices: return [] slice = slices[0] slice['hrn'] = slice_hrn # get sliver users persons = [] person_ids = [] for slice in slices: person_ids.extend(slice['person_ids']) if person_ids: persons = self.driver.shell.GetPersons(person_ids) # get user keys keys = {} key_ids = [] for person in persons: key_ids.extend(person['key_ids']) if key_ids: key_list = self.driver.shell.GetKeys(key_ids) for key in key_list: keys[key['key_id']] = key # construct user key info users = [] for person in persons: person_urn = hrn_to_urn(self.driver.shell.GetPersonHrn(int(person['person_id'])), 'user') user = { 'login': slice['name'], 'user_urn': person_urn, 'keys': [keys[k_id]['key'] for k_id in person['key_ids'] if k_id in keys] } users.append(user) if node_ids: node_ids = [node_id for node_id in node_ids if node_id in slice['node_ids']] slice['node_ids'] = node_ids tags_dict = self.get_slice_tags(slice) nodes_dict = self.get_slice_nodes(slice, options) slivers = [] for node in nodes_dict.values(): node.update(slice) node['tags'] = tags_dict[node['node_id']] sliver_hrn = '%s.%s-%s' % (self.driver.hrn, slice['slice_id'], node['node_id']) node['sliver_id'] = Xrn(sliver_hrn, type='sliver').urn node['urn'] = node['sliver_id'] node['services_user'] = users slivers.append(node) return slivers
def get_slivers(self, urns, options={}): names = set() slice_ids = set() node_ids = [] slice_hrn = None for urn in urns: xrn = PlXrn(xrn=urn) if xrn.type == 'sliver': # id: slice_id-node_id try: sliver_id_parts = xrn.get_sliver_id_parts() slice_id = int(sliver_id_parts[0]) node_id = int(sliver_id_parts[1]) slice_ids.add(slice_id) node_ids.append(node_id) except ValueError: pass else: slice_hrn = xrn.get_hrn() filter = {} filter['peer_id'] = None if slice_ids: filter['slice_id'] = list(slice_ids) # get all slices all_slices = self.driver.shell.GetSlices(filter, [ 'slice_id', 'name', 'hrn', 'person_ids', 'node_ids', 'slice_tag_ids', 'expires' ]) if slice_hrn: slices = [ slice for slice in all_slices if slice['hrn'] == slice_hrn ] else: slices = all_slices if not slices: return [] slice = slices[0] slice['hrn'] = slice_hrn # get sliver users persons = [] person_ids = [] for slice in slices: person_ids.extend(slice['person_ids']) if person_ids: persons = self.driver.shell.GetPersons(person_ids) # get user keys keys = {} key_ids = [] for person in persons: key_ids.extend(person['key_ids']) if key_ids: key_list = self.driver.shell.GetKeys(key_ids) for key in key_list: keys[key['key_id']] = key # construct user key info users = [] for person in persons: person_urn = hrn_to_urn( self.driver.shell.GetPersonHrn(int(person['person_id'])), 'user') user = { 'login': slice['name'], 'user_urn': person_urn, 'keys': [ keys[k_id]['key'] for k_id in person['key_ids'] if k_id in keys ] } users.append(user) if node_ids: node_ids = [ node_id for node_id in node_ids if node_id in slice['node_ids'] ] slice['node_ids'] = node_ids tags_dict = self.get_slice_tags(slice) nodes_dict = self.get_slice_nodes(slice, options) slivers = [] for node in nodes_dict.values(): node.update(slice) node['tags'] = tags_dict[node['node_id']] sliver_hrn = '%s.%s-%s' % (self.driver.hrn, slice['slice_id'], node['node_id']) node['sliver_id'] = Xrn(sliver_hrn, type='sliver').urn node['urn'] = node['sliver_id'] node['services_user'] = users slivers.append(node) return slivers