modified verify_site to work with the GeniAPI createsliver
authorJosh Karlin <jkarlin@bbn.com>
Wed, 12 May 2010 18:07:31 +0000 (18:07 +0000)
committerJosh Karlin <jkarlin@bbn.com>
Wed, 12 May 2010 18:07:31 +0000 (18:07 +0000)
sfa/managers/aggregate_manager_pl.py
sfa/managers/geni_am_pl.py
sfa/plc/slices.py
sfa/trust/credential.py

index c49d841..76c576b 100644 (file)
@@ -45,7 +45,7 @@ def __get_hostnames(nodes):
         hostnames.append(node.hostname)
     return hostnames
     
-def create_slice(api, xrn, xml):
+def create_slice(api, xrn, xml, reg_objects=None):
     """
     Verify HRN and initialize the slice record in PLC if necessary.
     """
@@ -58,9 +58,10 @@ def create_slice(api, xrn, xml):
     registry = api.registries[api.hrn]
     credential = api.getCredential()
     site_id, remote_site_id = slices.verify_site(registry, credential, hrn, 
-                                                 peer, sfa_peer)
+                                                 peer, sfa_peer, reg_objects)
+
     slice = slices.verify_slice(registry, credential, hrn, site_id, 
-                                remote_site_id, peer, sfa_peer)
+                                remote_site_id, peer, sfa_peer, reg_objects)
 
     network = Network(api)
 
index 01abcef..16f6475 100644 (file)
@@ -7,6 +7,7 @@ from sfa.util.record import *
 
 from sfa.plc.slices import *
 from sfa.util.sfalogging import *
+from sfa.util.record import SfaRecord
 from lxml import etree
 from StringIO import StringIO
 
@@ -53,12 +54,30 @@ def ListResources(api, creds, options):
 
 
 def CreateSliver(api, slice_xrn, creds, rspec):
+    reg_objects = {}
+    hrn, type = urn_to_hrn(slice_xrn)
+    
+    hrn_auth = get_authority(hrn)
+    
+    #site = SfaRecord(hrn=hrn_auth, type='authority')
+    site = {}
+    site['site_id'] = 0
+    site['name'] = 'geni.%s' % slice_xrn
+    site['enabled'] = True
+    site['max_slices'] = 100
+    site['login_base'] = get_leaf(hrn_auth)
+    site['abbreviated_name'] = hrn
+    site['max_slivers'] = 1000
+    
+    reg_objects['site'] = site
+    
     manager_base = 'sfa.managers'
     mgr_type = 'pl'
     manager_module = manager_base + ".aggregate_manager_%s" % mgr_type
     manager = __import__(manager_module, fromlist=[manager_base])
 
-    allocated = manager.create_slice(api, slice_xrn, rspec)
+    allocated = manager.create_slice(api, slice_xrn, rspec, reg_objects)
+    
     return allocated
 
 def DeleteSliver(api, slice_xrn, creds):
index 3c53504..f4977a3 100644 (file)
@@ -168,40 +168,46 @@ class Slices:
 
         return sfa_peer 
 
-    def verify_site(self, registry, credential, slice_hrn, peer, sfa_peer):
+    def verify_site(self, registry, credential, slice_hrn, peer, sfa_peer, reg_objects=None):
         authority = get_authority(slice_hrn)
         authority_urn = hrn_to_urn(authority, 'authority')
-        site_records = registry.resolve(credential, authority_urn)
+        
+        if reg_objects:
+            site = reg_objects['site']
+        else:
+            site_records = registry.resolve(credential, authority_urn)
+            site = {}            
+            for site_record in site_records:            
+                if site_record['type'] == 'authority':
+                    site = site_record
+            if not site:
+                raise RecordNotFound(authority)
             
-        site = {}
-        for site_record in site_records:
-            if site_record['type'] == 'authority':
-                site = site_record
-        if not site:
-            raise RecordNotFound(authority)
         remote_site_id = site.pop('site_id')    
                 
         login_base = get_leaf(authority)
         sites = self.api.plshell.GetSites(self.api.plauth, login_base)
+
         if not sites:
             site_id = self.api.plshell.AddSite(self.api.plauth, site)
             if peer:
                 self.api.plshell.BindObjectToPeer(self.api.plauth, 'site', site_id, peer, remote_site_id)   
             # mark this site as an sfa peer record
-            if sfa_peer:
+            if sfa_peer and not reg_objects:
                 peer_dict = {'type': 'authority', 'hrn': authority, 'peer_authority': sfa_peer, 'pointer': site_id}
                 registry.register_peer_object(credential, peer_dict)
         else:
             site_id = sites[0]['site_id']
             remote_site_id = sites[0]['peer_site_id']
+            
            old_site = sites[0]
-           #the site is alredy on the remote agg. Let us update(e.g. max_slices field) it with the latest info.
-           self.sync_site(old_site, site, peer)
+           #the site is already on the remote agg. Let us update(e.g. max_slices field) it with the latest info.
+        self.sync_site(old_site, site, peer)
 
 
         return (site_id, remote_site_id) 
 
-    def verify_slice(self, registry, credential, slice_hrn, site_id, remote_site_id, peer, sfa_peer):
+    def verify_slice(self, registry, credential, slice_hrn, site_id, remote_site_id, peer, sfa_peer, reg_objects=None):
         slice = {}
         slice_record = None
         authority = get_authority(slice_hrn)
index f3fb180..1a51832 100644 (file)
@@ -662,7 +662,7 @@ class Credential(object):
                             % (self.xmlsec_path, ref, cert_args, filename)).read()
             if not verified.strip().startswith("OK"):
                 raise CredentialNotVerifiable("xmlsec1 error: " + verified)
-        os.remove(filename)
+#        os.remove(filename)
 
         # Verify the parents (delegation)
         if self.parent: