Merge branch 'master' of git://git.onelab.eu/sfa into upmc
[sfa.git] / sfa / nitos / nitosdriver.py
index 3b1f30e..aa87bcc 100644 (file)
@@ -477,7 +477,9 @@ class NitosDriver (Driver):
         cached_requested = options.get('cached', True) 
         version_manager = VersionManager()
         # get the rspec's return format from options
-        rspec_version = version_manager.get_version(options.get('geni_rspec_version'))
+        #rspec_version = version_manager.get_version(options.get('geni_rspec_version'))
+        # rspec's return format for nitos aggregate is version  NITOS 1
+        rspec_version = version_manager.get_version('NITOS 1')
         version_string = "rspec_%s" % (rspec_version)
  
         #panos adding the info option to the caching key (can be improved)
@@ -550,11 +552,11 @@ class NitosDriver (Driver):
         # get login info
         user = {}
         keys = []
-        if slice['user_id']:
+        if slice['user_ids']:
             users = self.shell.getUsers()
             # filter users on slice['user_ids']
             for usr in users:
-                 if usr['user_id'] in slice['user_id']:
+                 if usr['user_id'] in slice['user_ids']:
                      keys.extend(usr['keys'])
                      
 
@@ -606,27 +608,11 @@ class NitosDriver (Driver):
         # ensure slice record exists
         slice = slices.verify_slice(slice_hrn, slice_record, sfa_peer, options=options)
         # ensure user records exists
-        #users = slices.verify_users(slice_hrn, slice, users, sfa_peer, options=options)
+        users = slices.verify_users(slice_hrn, slice, users, sfa_peer, options=options)
         
-        # add/remove slice from nodes
-        #requested_slivers = []
-        #for node in rspec.version.get_nodes_with_slivers():
-        #    hostname = None
-        #    if node.get('component_name'):
-        #        hostname = node.get('component_name').strip()
-        #    elif node.get('component_id'):
-        #        hostname = xrn_to_hostname(node.get('component_id').strip())
-        #    if hostname:
-        #        requested_slivers.append(hostname)
-        #nodes = slices.verify_slice_nodes(slice, requested_slivers, peer) 
-   
-        # add/remove channels
-
-
-        # add/remove leases
+        # add/remove leases (nodes and channels)
         # a lease in Nitos RSpec case is a reservation of nodes and channels grouped by (slice,timeslot)
         rspec_requested_nodes, rspec_requested_channels = rspec.version.get_leases()
-        print rspec_requested_nodes, rspec_requested_channels
   
         nodes = slices.verify_slice_leases_nodes(slice, rspec_requested_nodes)
         channels = slices.verify_slice_leases_channels(slice, rspec_requested_channels)
@@ -635,19 +621,25 @@ class NitosDriver (Driver):
 
     def delete_sliver (self, slice_urn, slice_hrn, creds, options):
         slicename = hrn_to_nitos_slicename(slice_hrn)
-        slices = self.shell.getSlices({'slice_name': slicename})
+        slices = self.filter_nitos_results(self.shell.getSlices({}, []), {'slice_name': slicename})
         if not slices:
             return 1
         slice = slices[0]
-    
+
+        slice_reserved_nodes = self.filter_nitos_results(self.shell.getReservedNodes({}, []), {'slice_id': slice['slice_id'] })
+        slice_reserved_channels = self.filter_nitos_results(self.shell.getReservedChannels(), {'slice_id': slice['slice_id'] })
+
+        slice_reserved_nodes_ids = [node['reservation_id'] for node in slice_reserved_nodes]
+        slice_reserved_channels_ids = [channel['reservation_id'] for channel in slice_reserved_channels]
+
+        # release all reserved nodes and channels for that slice
         try:
+            released_nodes = self.shell.releaseNodes({'reservation_ids': slice_reserved_nodes_ids})
+            released_channels = self.shell.releaseChannels({'reservation_ids': slice_reserved_channels_ids})
+        except:
             pass
-            #self.shell.DeleteSliceFromNodes({'slice_name': slicename, slice['node_ids']})
-        finally:
-            if peer:
-                self.shell.BindObjectToPeer('slice', slice['slice_id'], peer, slice['peer_slice_id'])
         return 1
-    
+
     def renew_sliver (self, slice_urn, slice_hrn, creds, expiration_time, options):
         slicename = hrn_to_nitos_slicename(slice_hrn)
         slices = self.shell.GetSlices({'slicename': slicename}, ['slice_id'])