to avoid NoneType object is not iterable error
[sfa.git] / sfa / managers / slice_manager_pl.py
index 72ea567..e311eaf 100644 (file)
@@ -55,11 +55,11 @@ def create_slice(api, xrn, rspec, origin_hrn=None):
     netspecs = spec.getDictsByTagName('NetSpec')
     for netspec in netspecs:
         net_hrn = netspec['name']
-        resources = {'start_time': start_time, 'end_time': end_time, 'networks': netspec}
+        resources = {'start_time': start_time, 'end_time': end_time, 'networks': {'NetSpec' : netspec}}
         resourceDict = {'RSpec': resources}
         tempspec.parseDict(resourceDict)
         rspecs[net_hrn] = tempspec.toxml()
-
+    
     #print "rspecs:", rspecs.keys()
     #print "aggregates:", aggregates.keys() 
     # send each rspec to the appropriate aggregate/sm
@@ -103,7 +103,7 @@ def get_ticket(api, xrn, rspec, origin_hrn=None):
     for netspec in netspecs:
         net_hrn = netspec['name']
         resources = {'start_time': 0, 'end_time': 0 , 
-                     'network': netspec}
+                     'network': {'NetSpec' : netspec}}
         resourceDict = {'RSpec': resources}
         temp_rspec.parseDict(resourceDict)
         rspecs[net_hrn] = temp_rspec.toxml() 
@@ -113,7 +113,7 @@ def get_ticket(api, xrn, rspec, origin_hrn=None):
     credential = api.getCredential()
     tickets = {}
     for net_hrn in rspecs:
-        net_urn = urn_to_hrn(net_hrn, 'authority')     
+        net_urn = urn_to_hrn(net_hrn)     
         try:
             # if we are directly connected to the aggregate then we can just
             # send them the request. if not, then we may be connected to an sm
@@ -137,28 +137,40 @@ def get_ticket(api, xrn, rspec, origin_hrn=None):
     # create a new ticket
     new_ticket = SfaTicket(subject = slice_hrn)
     new_ticket.set_gid_caller(api.auth.client_gid)
+    new_ticket.set_issuer(key=api.key, subject=api.hrn)
    
     tmp_rspec = RSpec()
     networks = []
-    valid_data = {} 
+    valid_data = {
+        'timestamp': int(time.time()),
+        'initscripts': [],
+        'slivers': [] 
+    } 
     # merge data from aggregate ticket into new ticket 
     for agg_ticket in tickets.values():
+        # get data from this ticket
         agg_ticket = SfaTicket(string=agg_ticket)
+        attributes = agg_ticket.get_attributes()
+       if attributes.get('initscripts', []) != None:
+            valid_data['initscripts'].extend(attributes.get('initscripts', []))
+       if attributes.get('slivers', []) != None:
+            valid_data['slivers'].extend(attributes.get('slivers', []))
+        # set the object gid
         object_gid = agg_ticket.get_gid_object()
         new_ticket.set_gid_object(object_gid)
-        new_ticket.set_issuer(key=api.key, subject=api.hrn)
         new_ticket.set_pubkey(object_gid.get_pubkey())
-        
-        #new_ticket.set_attributes(data)
+
+        # build the rspec
         tmp_rspec.parseString(agg_ticket.get_rspec())
         networks.extend([{'NetSpec': tmp_rspec.getDictsByTagName('NetSpec')}])
     
     #new_ticket.set_parent(api.auth.hierarchy.get_auth_ticket(auth_hrn))
+    new_ticket.set_attributes(valid_data)
     resources = {'networks': networks, 'start_time': 0, 'duration': 0}
     resourceDict = {'RSpec': resources}
     tmp_rspec.parseDict(resourceDict)
     new_ticket.set_rspec(tmp_rspec.toxml())
-        
     new_ticket.encode()
     new_ticket.sign()          
     return new_ticket.save_to_string(save_parents=True)