from sfa.util.xrn import Xrn
from sfa.util.sfalogging import logger
+from sqlalchemy import Column, Integer, String, DateTime
+from sqlalchemy import Table, Column, MetaData, join, ForeignKey
+from sfa.storage.model import RegRecord
+from sfa.storage.alchemy import dbsession,engine
+
MAXINT = 2L**31-1
class SlabSlices:
def __init__(self, driver):
self.driver = driver
- #def get_slivers(self, xrn, node=None):
+
+
+ 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)
#})
#return slivers
-
def get_peer(self, xrn):
hrn, type = urn_to_hrn(xrn)
#Does this slice belong to a local site or a peer senslab site?
#return site
def verify_slice(self, slice_hrn, slice_record, peer, sfa_peer, options={} ):
- #slicename = hrn_to_pl_slicename(slice_hrn)
- #parts = hrn_to_pl_slicename(slice_hrn).split("_")
+
login_base = slice_hrn.split(".")[0]
slicename = slice_hrn
- slices = self.driver.GetSlices(slice_filter={'slice_hrn': slicename})
- #slices = self.driver.GetSlices([slicename])
- print>>sys.stderr, " \r\n \r\rn Slices.py verify_slice slicename %s slices %s slice_record %s"%(slicename ,slices, slice_record)
- if not slices:
+ sl = self.driver.GetSlices(slice_filter=slicename, filter_type = 'slice_hrn')
+ if sl:
+
+ print>>sys.stderr, " \r\n \r\rn Slices.py verify_slice slicename %s sl %s slice_record %s"%(slicename ,sl, slice_record)
+ else:
+ print>>sys.stderr, " \r\n \r\rn Slices.py verify_slice UH-Oh..."
+ if not sl:
slice = {'name': slicename,
'url': slice_record.get('url', slice_hrn),
#'description': slice_record.get('description', slice_hrn)
#'peer_authority': sfa_peer, 'pointer': slice['slice_id']}
#self.registry.register_peer_object(self.credential, peer_dict)
else:
- slice = slices[0]
+ slice = sl
slice.update(slice_record)
#del slice['last_updated']
#del slice['date_created']