about to test CreateSliver
authorJosh Karlin <jkarlin@bbn.com>
Mon, 17 May 2010 18:56:29 +0000 (18:56 +0000)
committerJosh Karlin <jkarlin@bbn.com>
Mon, 17 May 2010 18:56:29 +0000 (18:56 +0000)
sfa/client/sfi.py
sfa/managers/geni_am_pl.py
sfa/plc/slices.py

index a27c3ff..8592ec1 100755 (executable)
@@ -955,7 +955,7 @@ class Sfi:
         rspec_file = self.get_rspec_file(args[1])
         rspec = open(rspec_file).read()
         server = self.geni_am
-        return server.CreateSliver(slice_xrn, [slice_cred], rspec)
+        return server.CreateSliver(slice_xrn, [slice_cred], rspec, [])
     
     def DeleteSliver(self, opts, args):
         slice_xrn = args[0]
index cd60989..6cae46a 100644 (file)
@@ -11,6 +11,8 @@ from sfa.util.record import SfaRecord
 from StringIO import StringIO
 from time import mktime
 
+from lxml import etree
+
 def GetVersion():
     version = {}
     version['geni_api'] = 1
@@ -60,47 +62,40 @@ def CreateSliver(api, slice_xrn, creds, rspec, users):
     
     # Build up objects that an SFA registry would return if SFA
     # could contact the slice's registry directly
-    reg_objects = {}
-
-    site = {}
-    site['site_id'] = 0
-    site['name'] = 'geni.%s' % hrn_auth
-    site['enabled'] = True
-    site['max_slices'] = 100
-    
-    # Note:
-    # Is it okay if this login base is the same as one already at this myplc site?  
-    # Do we need uniqueness?  Should use hrn_auth instead of just the leaf perhaps?
-    site['login_base'] = get_leaf(hrn_auth)
-    site['abbreviated_name'] = hrn
-    site['max_slivers'] = 1000    
-    reg_objects['site'] = site
+    reg_objects = None
     
-    slice = {}
-    slice['expires'] = int(mktime(Credential(string=creds[0]).get_lifetime().timetuple()))
-    slice['hrn'] = hrn
-    slice['name'] = site['login_base'] + "_" +  get_leaf(hrn)
-    slice['url'] = hrn
-    slice['description'] = hrn
-    slice['pointer'] = 0
-    reg_objects['slice_record'] = slice
+    if users:
+        reg_objects = {}
     
-    
-    # Note:
-    # Left off here, need to properly fill out the slice record and 
-    # stuff the user information in to get through slices.verify_persons
-    # Need to hear back from Tony Mack to find out how accurate the user
-    # information needs to be.
-    for user in users:
-        slice['researcher'].append(user.getdefault('name', 'geni_default_user'))
+        site = {}
+        site['site_id'] = 0
+        site['name'] = 'geni.%s' % hrn_auth
+        site['enabled'] = True
+        site['max_slices'] = 100
         
+        # Note:
+        # Is it okay if this login base is the same as one already at this myplc site?  
+        # Do we need uniqueness?  Should use hrn_auth instead of just the leaf perhaps?
+        site['login_base'] = get_leaf(hrn_auth)
+        site['abbreviated_name'] = hrn
+        site['max_slivers'] = 1000    
+        reg_objects['site'] = site
         
-    keys = []
-    for user in users:
-        keys += user['keys']
+        slice = {}
+        slice['expires'] = int(mktime(Credential(string=creds[0]).get_lifetime().timetuple()))
+        slice['hrn'] = hrn
+        slice['name'] = site['login_base'] + "_" +  get_leaf(hrn)
+        slice['url'] = hrn
+        slice['description'] = hrn
+        slice['pointer'] = 0
+        reg_objects['slice_record'] = slice
         
-    reg_objects['keys'] = keys
-    
+        reg_objects['users'] = {}
+        for user in users:
+            user['key_ids'] = []
+            reg_objects['users'][user['email']] = user     
+            
+               
     manager_base = 'sfa.managers'
     mgr_type = 'pl'
     manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
index 66766cf..2cb74dd 100644 (file)
@@ -265,28 +265,31 @@ class Slices:
         # get the list of valid slice users from the registry and make 
         # sure they are added to the slice 
         slicename = hrn_to_pl_slicename(slice_record['hrn'])
-        researchers = slice_record.get('researcher', [])
+        if reg_objects:
+            researchers = reg_objects['users'].keys()
+        else:
+            researchers = slice_record.get('researcher', [])
         for researcher in researchers:
-            person_record = {}
             if reg_objects:
-                person_records = reg_objects['users']['researcher']
+                person_dict = reg_objects['users'][researcher]
             else:
                 person_records = registry.resolve(credential, researcher)
-            for record in person_records:
-                if record['type'] in ['user'] and record['enabled']:
-                    person_record = record
-            if not person_record:
-                return 1
-            person_dict = person_record
+                for record in person_records:
+                    if record['type'] in ['user'] and record['enabled']:
+                        person_record = record
+                if not person_record:
+                    return 1
+                person_dict = person_record
+
             local_person=False
             if peer:
                 peer_id = self.api.plshell.GetPeers(self.api.plauth, {'shortname': peer}, ['peer_id'])[0]['peer_id']
                 persons = self.api.plshell.GetPersons(self.api.plauth, {'email': [person_dict['email']], 'peer_id': peer_id}, ['person_id', 'key_ids'])
-               if not persons:
-                   persons = self.api.plshell.GetPersons(self.api.plauth, [person_dict['email']], ['person_id', 'key_ids'])
-                   if persons:
-                       local_person=True
-
+                if not persons:
+                    persons = self.api.plshell.GetPersons(self.api.plauth, [person_dict['email']], ['person_id', 'key_ids'])
+                    if persons:
+                        local_person=True
+                        
             else:
                 persons = self.api.plshell.GetPersons(self.api.plauth, [person_dict['email']], ['person_id', 'key_ids'])