Changes to handle slices coming from federated testbed
[sfa.git] / sfa / senslab / slabaggregate.py
index 9a20226..c31b32b 100644 (file)
@@ -2,8 +2,7 @@ import time
 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
-from sfa.rspecs.elements.location import Location
+#from sfa.rspecs.elements.location import Location
 from sfa.rspecs.elements.hardware_type import HardwareType
 from sfa.rspecs.elements.login import Login
 from sfa.rspecs.elements.services import Services
@@ -13,7 +12,8 @@ from sfa.rspecs.elements.granularity import Granularity
 from sfa.rspecs.version_manager import VersionManager
 
 
-from sfa.rspecs.elements.versions.slabv1Node import SlabNode
+from sfa.rspecs.elements.versions.slabv1Node import SlabPosition, SlabNode, \
+                                                            SlabLocation
 from sfa.util.sfalogging import logger
 
 from sfa.util.xrn import Xrn
@@ -56,8 +56,9 @@ class SlabAggregate:
         slice_hrn, _ = urn_to_hrn(slice_xrn)
         slice_name = slice_hrn
 
-        slices = self.driver.GetSlices(slice_filter= str(slice_name), \
-                                                slice_filter_type = 'slice_hrn', login=login)
+        slices = self.driver.slab_api.GetSlices(slice_filter= str(slice_name), \
+                                            slice_filter_type = 'slice_hrn', \
+                                            login=login)
         
         logger.debug("Slabaggregate api \tget_slice_and_slivers \
                         sfa_slice %s \r\n slices %s self.driver.hrn %s" \
@@ -82,7 +83,6 @@ class SlabAggregate:
             for node in node_ids_list:
                 sliver_xrn = Xrn(slice_urn, type='sliver', id=node)
                 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['hrn'],
                                 'type': 'slab-node', 
@@ -93,11 +93,12 @@ class SlabAggregate:
         
         #Add default sliver attribute :
         #connection information for senslab
-        if get_authority (sfa_slice['hrn']) == self.driver.root_auth: 
+        if get_authority (sfa_slice['hrn']) == self.driver.slab_api.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}
+            ssh_access = None
+            slivers['default_sliver'] =  {'ssh': ssh_access , \
+                                        'login': ldap_username}
             
         #TODO get_slice_and_slivers Find the login of the external user
 
@@ -121,7 +122,7 @@ class SlabAggregate:
         #tags_filter = {}
         
         # get the granularity in second for the reservation system
-        grain = self.driver.GetLeaseGranularity()
+        grain = self.driver.slab_api.GetLeaseGranularity()
         
         # Commenting this part since all nodes should be returned, 
         # even if a slice is provided
@@ -130,20 +131,20 @@ class SlabAggregate:
         #        #first case, a non empty slice was provided
         #        filter['hostname'] = slice['node_ids']
         #        tags_filter=filter.copy()
-        #        nodes = self.driver.GetNodes(filter['hostname'])
+        #        nodes = self.driver.slab_api.GetNodes(filter['hostname'])
         #    else :
         #        #second case, a slice was provided, but is empty
         #        nodes={}
         #else :
         #    #third case, no slice was provided
-        #    nodes = self.driver.GetNodes()
-        nodes = self.driver.GetNodes()
+        #    nodes = self.driver.slab_api.GetNodes()
+        nodes = self.driver.slab_api.GetNodes()
         #geni_available = options.get('geni_available')    
         #if geni_available:
             #filter['boot_state'] = 'boot'     
        
         #filter.update({'peer_id': None})
-        #nodes = self.driver.GetNodes(filter['hostname'])
+        #nodes = self.driver.slab_api.GetNodes(filter['hostname'])
         
         #site_ids = []
         #interface_ids = []
@@ -176,7 +177,7 @@ class SlabAggregate:
                 #for node in one_slice['node_ids']:
                     #slice_nodes_list.append(node)
                    
-        reserved_nodes = self.driver.GetNodesCurrentlyInUse()
+        reserved_nodes = self.driver.slab_api.GetNodesCurrentlyInUse()
         logger.debug("SLABAGGREGATE api get_nodes slice_nodes_list  %s "\
                                                              %(slice_nodes_list)) 
         for node in nodes:
@@ -193,15 +194,17 @@ class SlabAggregate:
                 # xxx how to retrieve site['login_base']
                 #site_id=node['site_id']
                 #site=sites_dict[site_id]
+
                 rspec_node['mobile'] = node['mobile']
                 rspec_node['archi'] = node['archi']
                 rspec_node['radio'] = node['radio']
     
-                slab_xrn = slab_xrn_object(self.driver.root_auth, node['hostname'])
+                slab_xrn = slab_xrn_object(self.driver.slab_api.root_auth, \
+                                                    node['hostname'])
                 rspec_node['component_id'] = slab_xrn.urn
                 rspec_node['component_name'] = node['hostname']  
                 rspec_node['component_manager_id'] = \
-                                hrn_to_urn(self.driver.root_auth, 'authority+sa')
+                                hrn_to_urn(self.driver.slab_api.root_auth, 'authority+sa')
                 
                 # Senslab's nodes are federated : there is only one authority 
                 # for all Senslab sites, registered in SFA.
@@ -217,16 +220,19 @@ class SlabAggregate:
                 if node['hostname'] in reserved_nodes:
                     rspec_node['boot_state'] = "Reserved"
                 rspec_node['exclusive'] = 'true'
-                rspec_node['hardware_types'] = [HardwareType({'name': 'slab-node'})]
+                rspec_node['hardware_types'] = [HardwareType({'name': \
+                                                'slab-node'})]
     
                 # only doing this because protogeni rspec needs
                 # to advertise available initscripts 
                 # add site/interface info to nodes.
-                # assumes that sites, interfaces and tags have already been prepared.
-                #site = sites_dict[node['site_id']]
-                location = Location({'country':'France'})
+                # assumes that sites, interfaces and tags have already been             
+                #prepared.
+
+                location = SlabLocation({'country':'France','site': \
+                                            node['site']})
                 rspec_node['location'] = location
-            
+
             
                 position = SlabPosition()
                 for field in position :
@@ -267,9 +273,9 @@ class SlabAggregate:
             #lease_filter.update({'name': slice_record['name']})
         return_fields = ['lease_id', 'hostname', 'site_id', \
                             'name', 'start_time', 'duration']
-        #leases = self.driver.GetLeases(lease_filter)
-        leases = self.driver.GetLeases()
-        grain = self.driver.GetLeaseGranularity()
+        #leases = self.driver.slab_api.GetLeases(lease_filter)
+        leases = self.driver.slab_api.GetLeases()
+        grain = self.driver.slab_api.GetLeaseGranularity()
         site_ids = []
         rspec_leases = []
         for lease in leases:
@@ -278,7 +284,7 @@ class SlabAggregate:
                 rspec_lease = Lease()
                 rspec_lease['lease_id'] = lease['lease_id']
                 #site = node['site_id']
-                slab_xrn = slab_xrn_object(self.driver.root_auth, node)
+                slab_xrn = slab_xrn_object(self.driver.slab_api.root_auth, node)
                 rspec_lease['component_id'] = slab_xrn.urn
                 #rspec_lease['component_id'] = hostname_to_urn(self.driver.hrn, \
                                         #site, node['hostname'])
@@ -354,6 +360,11 @@ class SlabAggregate:
         if lease_option in ['all', 'resources']:
         #if not options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'leases':
             nodes = self.get_nodes(slices, slivers) 
+            logger.debug("\r\n \r\n SlabAggregate \ lease_option %s get rspec  ******* nodes %s"\
+                                            %(lease_option, nodes[0]))
+
+            sites_set = set([node['location']['site'] for node in nodes] )    
+
             #In case creating a job,  slice_xrn is not set to None
             rspec.version.add_nodes(nodes)
             if slice_xrn :
@@ -370,7 +381,7 @@ class SlabAggregate:
                 ldap_username = tmp[1].split('_')[0]
               
                 if version.type == "Slab":
-                    rspec.version.add_connection_information(ldap_username)
+                    rspec.version.add_connection_information(ldap_username, sites_set)
 
             default_sliver = slivers.get('default_sliver', [])
             if default_sliver: