Propagating the users' senslab login in GetSlices, get_rspec and GetLeases
[sfa.git] / sfa / senslab / slabaggregate.py
index 1d0a141..9a20226 100644 (file)
@@ -1,5 +1,5 @@
 import time
-from sfa.util.xrn import hrn_to_urn, urn_to_hrn
+from sfa.util.xrn import hrn_to_urn, urn_to_hrn, get_authority
 
 from sfa.rspecs.rspec import RSpec
 from sfa.rspecs.elements.versions.slabv1Node import SlabPosition
@@ -44,7 +44,7 @@ class SlabAggregate:
     def __init__(self, driver):
         self.driver = driver
 
-    def get_slice_and_slivers(self, slice_xrn):
+    def get_slice_and_slivers(self, slice_xrn, login=None):
         """
         Returns a dict of slivers keyed on the sliver's node_id
         """
@@ -57,10 +57,11 @@ class SlabAggregate:
         slice_name = slice_hrn
 
         slices = self.driver.GetSlices(slice_filter= str(slice_name), \
-                                                slice_filter_type = 'slice_hrn')
+                                                slice_filter_type = 'slice_hrn', login=login)
+        
         logger.debug("Slabaggregate api \tget_slice_and_slivers \
-                        slices %s self.driver.hrn %s" \
-                        %(slices, self.driver.hrn))
+                        sfa_slice %s \r\n slices %s self.driver.hrn %s" \
+                        %(sfa_slice, slices, self.driver.hrn))
         if not slices:
             return (sfa_slice, slivers)
         #if isinstance(sfa_slice, list):
@@ -83,7 +84,7 @@ class SlabAggregate:
                 sliver_xrn.set_authority(self.driver.hrn)
                 #node_id = self.driver.root_auth + '.' + node_id
                 sliver = Sliver({'sliver_id':sliver_xrn.urn, 
-                                'name': sfa_slice['slice_hrn'],
+                                'name': sfa_slice['hrn'],
                                 'type': 'slab-node', 
                                 'tags': []})
                 
@@ -92,10 +93,13 @@ class SlabAggregate:
         
         #Add default sliver attribute :
         #connection information for senslab
-        tmp = sfa_slice['slice_hrn'].split('.')
-        ldap_username = tmp[1].split('_')[0]
-        vmaddr = 'ssh ' + ldap_username + '@grenoble.senslab.info'
-        slivers['default_sliver'] =  {'vm': vmaddr , 'login': ldap_username}
+        if get_authority (sfa_slice['hrn']) == self.driver.root_auth: 
+            tmp = sfa_slice['hrn'].split('.')
+            ldap_username = tmp[1].split('_')[0]
+            vmaddr = 'ssh ' + ldap_username + '@grenoble.senslab.info'
+            slivers['default_sliver'] =  {'vm': vmaddr , 'login': ldap_username}
+            
+        #TODO get_slice_and_slivers Find the login of the external user
 
         logger.debug("SLABAGGREGATE api get_slice_and_slivers  slivers %s "\
                                                              %(slivers))
@@ -278,7 +282,11 @@ class SlabAggregate:
                 rspec_lease['component_id'] = slab_xrn.urn
                 #rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, \
                                         #site, node['hostname'])
-                rspec_lease['slice_id'] = lease['slice_id']
+                try:
+                    rspec_lease['slice_id'] = lease['slice_id']
+                except KeyError:
+                    #No info on the slice used in slab_xp table
+                    pass
                 rspec_lease['start_time'] = lease['t_from']
                 rspec_lease['duration'] = (lease['t_until'] - lease['t_from']) \
                                                                     / grain   
@@ -304,7 +312,7 @@ class SlabAggregate:
             #rspec_leases.append(rspec_lease)
         #return rspec_leases   
 #from plc/aggregate.py 
-    def get_rspec(self, slice_xrn=None, version = None, options={}):
+    def get_rspec(self, slice_xrn=None, login=None, version = None, options={}):
 
         rspec = None
         version_manager = VersionManager()     
@@ -321,7 +329,7 @@ class SlabAggregate:
             rspec_version = version_manager._get_version(version.type, \
                                                 version.version, 'manifest')
            
-        slices, slivers = self.get_slice_and_slivers(slice_xrn)
+        slices, slivers = self.get_slice_and_slivers(slice_xrn, login)
         #at this point sliver may be empty if no senslab job 
         #is running for this user/slice.
         rspec = RSpec(version=rspec_version, user_options=options)
@@ -331,15 +339,16 @@ class SlabAggregate:
            #rspec.xml.set('expires',  datetime_to_epoch(slice['expires']))
          # add sliver defaults
         #nodes, links = self.get_nodes(slice, slivers)
-        logger.debug("\r\n \r\n SlabAggregate \tget_rspec ******* slice_xrn %s \r\n \r\n"\
-                                            %(slice_xrn)) 
+        logger.debug("\r\n \r\n SlabAggregate \tget_rspec ******* slice_xrn %s slices  %s\r\n \r\n"\
+                                            %(slice_xrn, slices)) 
                                             
         try:                                    
             lease_option = options['list_leases']
         except KeyError:
             #If no options are specified, at least print the resources
-            if slice_xrn :
-                lease_option = 'all'
+            lease_option = 'all'
+           #if slice_xrn :
+               #lease_option = 'all'
             pass 
         
         if lease_option in ['all', 'resources']:
@@ -356,7 +365,7 @@ class SlabAggregate:
                 
                 
                 #for one_slice in slices :
-                ldap_username = slices[0]['slice_hrn']
+                ldap_username = slices[0]['hrn']
                 tmp = ldap_username.split('.')
                 ldap_username = tmp[1].split('_')[0]