-
- def get_slivers(self, xrn, node=None):
- hrn, type = urn_to_hrn(xrn)
-
- slice_name = hrn_to_pl_slicename(hrn)
- # XX Should we just call PLCAPI.GetSliceTicket(slice_name) instead
- # of doing all of this?
- #return self.api.driver.GetSliceTicket(self.auth, slice_name)
-
-
-
- slice = self.driver.GetSlices(slice_filter = slice_name, filter_type = 'slice_hrn')
-
-
- # Get user information
- alchemy_person = dbsession.query(RegRecord).filter_by(record_id = slice['record_id_user']).first()
-
- slivers = []
- sliver_attributes = []
-
- if slice['oar_job_id'] is not -1:
- nodes_all = self.GetNodes({'hostname':slice['node_ids']},
- ['node_id', 'hostname','site','boot_state'])
- nodeall_byhostname = dict([(n['hostname'], n) for n in nodes_all])
- nodes = slice['node_ids']
-
- for node in nodes:
- #for sliver_attribute in filter(lambda a: a['node_id'] == node['node_id'], slice_tags):
- sliver_attribute['tagname'] = 'slab-tag'
- sliver_attribute['value'] = 'slab-value'
- sliver_attributes.append(sliver_attribute['tagname'])
- attributes.append({'tagname': sliver_attribute['tagname'],
- 'value': sliver_attribute['value']})
-
- # set nodegroup slice attributes
- for slice_tag in filter(lambda a: a['nodegroup_id'] in node['nodegroup_ids'], slice_tags):
- # Do not set any nodegroup slice attributes for
- # which there is at least one sliver attribute
- # already set.
- if slice_tag not in slice_tags:
- attributes.append({'tagname': slice_tag['tagname'],
- 'value': slice_tag['value']})
-
- for slice_tag in filter(lambda a: a['node_id'] is None, slice_tags):
- # Do not set any global slice attributes for
- # which there is at least one sliver attribute
- # already set.
- if slice_tag['tagname'] not in sliver_attributes:
- attributes.append({'tagname': slice_tag['tagname'],
- 'value': slice_tag['value']})
-
- # XXX Sanity check; though technically this should be a system invariant
- # checked with an assertion
- if slice['expires'] > MAXINT: slice['expires']= MAXINT
-
- slivers.append({
- 'hrn': hrn,
- 'name': slice['name'],
- 'slice_id': slice['slice_id'],
- 'instantiation': slice['instantiation'],
- 'expires': slice['expires'],
- 'keys': keys,
- 'attributes': attributes
- })
-
- return slivers
-
-
-
- #def get_slivers(self, xrn, node=None):
- #hrn, type = urn_to_hrn(xrn)
-
- #slice_name = hrn_to_pl_slicename(hrn)
- ## XX Should we just call PLCAPI.GetSliceTicket(slice_name) instead
- ## of doing all of this?
- ##return self.api.driver.GetSliceTicket(self.auth, slice_name)
-
- ## from PLCAPI.GetSlivers.get_slivers()
- #slice_fields = ['slice_id', 'name', 'instantiation', 'expires', 'person_ids', 'slice_tag_ids']
- #slices = self.api.driver.GetSlices(slice_name, slice_fields)
- ## Build up list of users and slice attributes
- #person_ids = set()
- #all_slice_tag_ids = set()
- #for slice in slices:
- #person_ids.update(slice['person_ids'])
- #all_slice_tag_ids.update(slice['slice_tag_ids'])
- #person_ids = list(person_ids)
- #all_slice_tag_ids = list(all_slice_tag_ids)
- ## Get user information
- #all_persons_list = self.api.driver.GetPersons({'person_id':person_ids,'enabled':True}, ['person_id', 'enabled', 'key_ids'])
- #all_persons = {}
- #for person in all_persons_list:
- #all_persons[person['person_id']] = person
-
- ## Build up list of keys
- #key_ids = set()
- #for person in all_persons.values():
- #key_ids.update(person['key_ids'])
- #key_ids = list(key_ids)
- ## Get user account keys
- #all_keys_list = self.api.driver.GetKeys(key_ids, ['key_id', 'key', 'key_type'])
- #all_keys = {}
- #for key in all_keys_list:
- #all_keys[key['key_id']] = key
- ## Get slice attributes
- #all_slice_tags_list = self.api.driver.GetSliceTags(all_slice_tag_ids)
- #all_slice_tags = {}
- #for slice_tag in all_slice_tags_list:
- #all_slice_tags[slice_tag['slice_tag_id']] = slice_tag
-
- #slivers = []
- #for slice in slices:
- #keys = []
- #for person_id in slice['person_ids']:
- #if person_id in all_persons:
- #person = all_persons[person_id]
- #if not person['enabled']:
- #continue
- #for key_id in person['key_ids']:
- #if key_id in all_keys:
- #key = all_keys[key_id]
- #keys += [{'key_type': key['key_type'],
- #'key': key['key']}]
- #attributes = []
- ## All (per-node and global) attributes for this slice
- #slice_tags = []
- #for slice_tag_id in slice['slice_tag_ids']:
- #if slice_tag_id in all_slice_tags:
- #slice_tags.append(all_slice_tags[slice_tag_id])
- ## Per-node sliver attributes take precedence over global
- ## slice attributes, so set them first.
- ## Then comes nodegroup slice attributes
- ## Followed by global slice attributes
- #sliver_attributes = []
-
- #if node is not None:
- #for sliver_attribute in filter(lambda a: a['node_id'] == node['node_id'], slice_tags):
- #sliver_attributes.append(sliver_attribute['tagname'])
- #attributes.append({'tagname': sliver_attribute['tagname'],
- #'value': sliver_attribute['value']})
-
- ## set nodegroup slice attributes
- #for slice_tag in filter(lambda a: a['nodegroup_id'] in node['nodegroup_ids'], slice_tags):
- ## Do not set any nodegroup slice attributes for
- ## which there is at least one sliver attribute
- ## already set.
- #if slice_tag not in slice_tags:
- #attributes.append({'tagname': slice_tag['tagname'],
- #'value': slice_tag['value']})
-
- #for slice_tag in filter(lambda a: a['node_id'] is None, slice_tags):
- ## Do not set any global slice attributes for
- ## which there is at least one sliver attribute
- ## already set.
- #if slice_tag['tagname'] not in sliver_attributes:
- #attributes.append({'tagname': slice_tag['tagname'],
- #'value': slice_tag['value']})
-
- ## XXX Sanity check; though technically this should be a system invariant
- ## checked with an assertion
- #if slice['expires'] > MAXINT: slice['expires']= MAXINT
-
- #slivers.append({
- #'hrn': hrn,
- #'name': slice['name'],
- #'slice_id': slice['slice_id'],
- #'instantiation': slice['instantiation'],
- #'expires': slice['expires'],
- #'keys': keys,
- #'attributes': attributes
- #})
-
- #return slivers