Merge branch 'geni-v3' of ssh://git.onelab.eu/git/sfa into geni-v3
[sfa.git] / sfa / iotlab / iotlabaggregate.py
index 52acfad..32ad801 100644 (file)
@@ -306,7 +306,7 @@ class IotlabAggregate:
         return rspec_node
 
 
-    def rspec_node_to_geni_sliver(self, rspec_node, sliver_allocations = {}):
+    def rspec_node_to_geni_sliver(self, rspec_node, sliver_allocations = None):
         """Makes a geni sliver structure from all the nodes allocated
         to slivers in the sliver_allocations dictionary. Returns the states
         of the sliver.
@@ -326,6 +326,7 @@ class IotlabAggregate:
         .. seealso:: node_to_rspec_node
 
         """
+        if sliver_allocations is None: sliver_allocations={}
         if rspec_node['sliver_id'] in sliver_allocations:
             # set sliver allocation and operational status
             sliver_allocation = sliver_allocations[rspec_node['sliver_id']]
@@ -400,12 +401,12 @@ class IotlabAggregate:
         return rspec_node
 
 
-    def get_leases(self, slice=None, options={}):
+    def get_leases(self, slice=None, options=None):
+        if options is None: options={}
         filter={}
         if slice:
-           #filter.update({'name':slice['slice_name']}) # JORDAN: this is = "upmc" !!!
            filter.update({'slice_hrn':slice['slice_hrn']}) # JORDAN: this is = "upmc" !!!
-            # slice_hrn = "ple.upmc.myslicedemo
+           #filter.update({'name':slice['slice_name']})
         #return_fields = ['lease_id', 'hostname', 'site_id', 'name', 't_from', 't_until']
         leases = self.driver.GetLeases(lease_filter_dict=filter)
         grain = self.driver.testbed_shell.GetLeaseGranularity()
@@ -600,7 +601,7 @@ class IotlabAggregate:
                        FINAL RSPEC %s \r\n" % (rspec.toxml()))
         return rspec.toxml()
 
-    def get_slivers(self, urns, options={}):
+    def get_slivers(self, urns, options=None):
         """Get slivers of the given slice urns. Slivers contains slice, node and
         user information.
 
@@ -614,8 +615,9 @@ class IotlabAggregate:
 
         .. seealso:: http://groups.geni.net/geni/wiki/GAPI_AM_API_V3/CommonConcepts#urns
         """
-
+        # JORDAN using SLICE_KEY for slice_hrn
         SLICE_KEY = 'slice_hrn' # slice_hrn
+        if options is None: options={}
         slice_ids = set()
         node_ids = []
         for urn in urns:
@@ -650,7 +652,7 @@ class IotlabAggregate:
         #     filter['slice_id'] = list(slice_ids)
         # # get slices
         if slice_hrn:
-            logger.debug("JORDAN SLICE_HRN=%r" % slice_hrn)
+            #logger.debug("JORDAN SLICE_HRN=%r" % slice_hrn)
             slices = self.driver.GetSlices(slice_hrn,
                 slice_filter_type)
             leases = self.driver.GetLeases({SLICE_KEY:slice_hrn})
@@ -659,16 +661,16 @@ class IotlabAggregate:
         if not slices:
             return []
 
-        logger.debug("LOIC SLICES = %r" % slices)
         single_slice = slices[0]
         # get sliver users
-
         # XXX LOIC !!! XXX QUICK AND DIRTY - Let's try...
         logger.debug("LOIC Number of reg_researchers = %s" % len(single_slice['reg_researchers']))
         if 'reg_researchers' in single_slice and len(single_slice['reg_researchers'])==0:
             user = {'uid':single_slice['user']}
         else:
             user = single_slice['reg_researchers'][0].__dict__
+
+        user = single_slice['reg_researchers'][0].__dict__
         logger.debug("IotlabAggregate \t get_slivers user %s \
                        \r\n" % (user))
 
@@ -678,7 +680,6 @@ class IotlabAggregate:
                        \r\n" % (person))
         # name = person['last_name']
         user['login'] = person['uid']
-
         # XXX LOIC !!! if we have more info, let's fill user
         if 'hrn' in user:
             user['user_urn'] = hrn_to_urn(user['hrn'], 'user')
@@ -687,8 +688,10 @@ class IotlabAggregate:
 
 
         try:
+            logger.debug("############################################ iotlab AM : single_slice = %s" % single_slice)
             node_ids = single_slice['node_ids']
             node_list = self.driver.testbed_shell.GetNodes()
+            logger.debug("############################################ iotlab AM : node_list = %s" % node_list)
 # JORDAN REMOVED FILTER so that next check always succeed
 #                    {'hostname':single_slice['node_ids']})
             node_by_hostname = dict([(node['hostname'], node)
@@ -719,7 +722,7 @@ class IotlabAggregate:
                 #    logger.debug("Ignored missing hostname for now one")
                 # oar_job_id is the slice_id (lease_id)
                 sliver_hrn = '%s.%s-%s' % (self.driver.hrn,
-                            current_lease['lease_id'], node_id)
+                             current_lease['lease_id'], node_id)
                 node['node_id'] = node_id
                 node['expires'] = current_lease['t_until']
                 node['sliver_id'] = Xrn(sliver_hrn, type='sliver').urn
@@ -729,7 +732,7 @@ class IotlabAggregate:
                 slivers.append(node)
         return slivers
 
-    def list_resources(self, version = None, options={}):
+    def list_resources(self, version = None, options=None):
         """
         Returns an advertisement Rspec of available resources at this
         aggregate. This Rspec contains a resource listing along with their
@@ -750,6 +753,7 @@ class IotlabAggregate:
         .. seealso:: http://groups.geni.net/geni/wiki/GAPI_AM_API_V3#ListResources
         """
 
+        if options is None: options={}
         version_manager = VersionManager()
         version = version_manager.get_version(version)
         rspec_version = version_manager._get_version(version.type,
@@ -784,7 +788,7 @@ class IotlabAggregate:
         return rspec.toxml()
 
 
-    def describe(self, urns, version=None, options={}):
+    def describe(self, urns, version=None, options=None):
         """
         Retrieve a manifest RSpec describing the resources contained by the
         named entities, e.g. a single slice or a set of the slivers in a slice.
@@ -814,6 +818,7 @@ class IotlabAggregate:
         .. seealso:: http://groups.geni.net/geni/wiki/GAPI_AM_API_V3#Describe
         .. seealso:: http://groups.geni.net/geni/wiki/GAPI_AM_API_V3/CommonConcepts#urns
         """
+        if options is None: options={}
         version_manager = VersionManager()
         version = version_manager.get_version(version)
         rspec_version = version_manager._get_version(
@@ -823,7 +828,6 @@ class IotlabAggregate:
         # get slivers
         geni_slivers = []
         slivers = self.get_slivers(urns, options)
-        logger.debug("SLIVERS=%r" % slivers)
         if slivers:
             rspec_expires = datetime_to_string(utcparse(slivers[0]['expires']))
         else:
@@ -841,9 +845,10 @@ class IotlabAggregate:
             geni_urn = sliver_allocation.slice_urn
             sliver_allocation_dict[sliver_allocation.sliver_id] = \
                                                             sliver_allocation
+        # JORDAN get the option list_leases if we want to have the leases in describe 
         show_leases = options.get('list_leases')
         if show_leases in ['resources', 'all']:
-        #if not options.get('list_leases') or options['list_leases'] != 'leases':                                                    
+        #if not options.get('list_leases') or options['list_leases'] != 'leases': 
             # add slivers
             nodes_dict = {}
             for sliver in slivers:
@@ -858,7 +863,6 @@ class IotlabAggregate:
                 geni_slivers.append(geni_sliver)
             rspec.version.add_nodes(rspec_nodes)
 
-        logger.debug("SHOW LEASES = %r" % show_leases)
         if show_leases in ['leases', 'all']:
         #if not options.get('list_leases') or options['list_leases'] == 'resources':
             if slivers: