update how RSpecVersion is used
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Tue, 17 May 2011 22:57:13 +0000 (18:57 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Tue, 17 May 2011 22:57:13 +0000 (18:57 -0400)
sfa/client/sfi.py
sfa/managers/aggregate_manager_pl.py
sfa/managers/slice_manager_pl.py
sfa/rspecs/pg_rspec.py
sfa/rspecs/pl_rspec_version.py
sfa/rspecs/rspec.py
sfa/rspecs/rspec_converter.py
sfa/rspecs/rspec_parser.py
sfa/rspecs/rspec_version.py
sfa/rspecs/sfa_rspec.py

index 84c77d6..8fe2349 100755 (executable)
@@ -841,8 +841,10 @@ class Sfi:
             delegated_cred = self.delegate_cred(cred, get_authority(self.authority))
             creds.append(delegated_cred)
         if opts.rspec_version:
-            call_options['rspec_version'] = opts.rspec_version 
+            #call_options['rspec_version'] = opts.rspec_version 
+            call_options['rspec_version'] = {'type': opts.rspec_version, 'version': "2"} 
         result = server.ListResources(creds, call_options,unique_call_id())
+        #result = server.ListResources(creds, call_options)
         format = opts.format
         if opts.file is None:
             display_rspec(result, format)
@@ -875,8 +877,9 @@ class Sfi:
         version = server.GetVersion()
         if 'sfa' not in version:
             # need to pass along user keys if this request is going to a ProtoGENI aggregate 
-            # ProtoGeni Aggregaes will only install the keys of the user that is issuing the
-            # request.  all slice keys
+            # ProtoGeni Aggregates will only install the keys of the user that is issuing the
+            # request. So we will only pass in one user that contains the keys for all
+            # users of the slice 
             user = {'urn': user_cred.get_gid_caller().get_urn(),
                     'keys': []}
             slice_record = self.registry.Resolve(slice_urn, creds)
index f38d68f..081695d 100644 (file)
@@ -1,3 +1,5 @@
+#!/usr/bin/python
+
 import datetime
 import time
 import traceback
@@ -23,17 +25,23 @@ from sfa.plc.aggregate import Aggregate
 from sfa.plc.slices import *
 from sfa.util.version import version_core
 from sfa.rspecs.rspec_version import RSpecVersion
-from sfa.rspecs.pl_rspec_version import supported_rspecs 
+from sfa.rspecs.sfa_rspec import sfa_rspec_version
+from sfa.rspecs.pg_rspec import pg_rspec_version
 from sfa.rspecs.rspec_parser import parse_rspec 
 from sfa.util.sfatime import utcparse
 from sfa.util.callids import Callids
 
 def GetVersion(api):
     xrn=Xrn(api.hrn)
+
+    supported_rspecs = [dict(pg_rspec_version), dict(sfa_rspec_version)]
     version_more = {'interface':'aggregate',
                     'testbed':'myplc',
-                    'hrn':xrn.get_hrn()}
-    version_more.update(supported_rspecs)
+                    'hrn':xrn.get_hrn(),
+                    'request_rspec_versions': supported_rspecs,
+                    'ad_rspec_versions': supported_rspecs,
+                    'default_ad_rspec': dict(sfa_rspec_version)
+                    }
     return version_core(version_more)
 
 def __get_registry_objects(slice_xrn, creds, users):
@@ -202,7 +210,7 @@ def CreateSliver(api, slice_xrn, creds, rspec_string, users, call_id):
             api.plshell.BindObjectToPeer(api.plauth, 'slice', slice.id, peer, 
                                          slice.peer_id)
 
-    return aggregate.get_rspec(slice_xrn=slice_xrn, version=rspec.type)
+    return aggregate.get_rspec(slice_xrn=slice_xrn, version=rspec.version)
 
 
 def RenewSliver(api, xrn, creds, expiration_time, call_id):
@@ -303,7 +311,7 @@ def ListResources(api, creds, options,call_id):
     (hrn, type) = urn_to_hrn(xrn)
 
     # get the rspec's return format from options
-    rspec_version = RSpecVersion(options.get('rspec_version', 'SFA 1'))
+    rspec_version = RSpecVersion(options.get('rspec_version'))
     version_string = "rspec_%s" % (rspec_version.get_version_name())
     
     # look in cache first
index fa535e4..1765179 100644 (file)
@@ -20,7 +20,8 @@ from sfa.rspecs.sfa_rspec import SfaRSpec
 from sfa.rspecs.rspec_converter import RSpecConverter
 from sfa.rspecs.rspec_parser import parse_rspec    
 from sfa.rspecs.rspec_version import RSpecVersion
-from sfa.rspecs.pl_rspec_version import supported_rspecs
+from sfa.rspecs.sfa_rspec import sfa_rspec_version
+from sfa.rspecs.pg_rspec import pg_rspec_version    
 from sfa.util.policy import Policy
 from sfa.util.prefixTree import prefixTree
 from sfa.util.sfaticket import *
@@ -45,11 +46,15 @@ def GetVersion(api):
     peers =dict ([ (peername,get_serverproxy_url(v)) for (peername,v) in api.aggregates.iteritems() 
                    if peername != api.hrn])
     xrn=Xrn (api.hrn)
+    supported_rspecs = [dict(pg_rspec_version), dict(sfa_rspec_version)]
     version_more = {'interface':'slicemgr',
                     'hrn' : xrn.get_hrn(),
                     'urn' : xrn.get_urn(),
-                    'peers': peers,}
-    version_more.update(supported_rspecs)     
+                    'peers': peers,
+                    'request_rspec_versions': supported_rspecs,
+                    'ad_rspec_versions': supported_rspecs,
+                    'default_ad_rspec': dict(sfa_rspec_version)
+                    }
     sm_version=version_core(version_more)
     # local aggregate if present needs to have localhost resolved
     if api.hrn in api.aggregates:
@@ -354,7 +359,8 @@ def ListResources(api, creds, options, call_id):
     (hrn, type) = urn_to_hrn(xrn)
 
     # get the rspec's return format from options
-    rspec_version = RSpecVersion(options.get('rspec_version', 'SFA 1'))
+    rspec_version = RSpecVersion(options.get('rspec_version'))
+    print dict(rspec_version)
     version_string = "rspec_%s" % (rspec_version.get_version_name())
 
     # look in cache first
index a2033cd..a998f86 100755 (executable)
@@ -4,19 +4,26 @@ from StringIO import StringIO
 from sfa.rspecs.rspec import RSpec 
 from sfa.util.xrn import *
 from sfa.util.plxrn import hostname_to_urn
-from sfa.util.config import Config  
+from sfa.util.config import Config 
+from sfa.rspecs.rspec_version import RSpecVersion 
+
+_version = {'type':  'protogeni',
+            'version': '2',
+            'schema': 'http://www.protogeni.net/resources/rspec/2/request.xsd',
+            'namespace': 'http://www.protogeni.net/resources/rspec/2',
+            'extenstions':  [
+                'http://www.protogeni.net/resources/rspec/ext/gre-tunnel/1',
+                'http://www.protogeni.net/resources/rspec/ext/other-ext/3'
+            ]
+}
+pg_rspec_version = RSpecVersion(_version)
 
 class PGRSpec(RSpec):
+    xml = None
     header = '<?xml version="1.0"?>\n'
     template = """<rspec xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.protogeni.net/resources/rspec/0.2" xsi:schemaLocation="http://www.protogeni.net/resources/rspec/0.2 http://www.protogeni.net/resources/rspec/0.2/ad.xsd"></rspec>"""
-    namespaces = {'rspecv2':'http://www.protogeni.net/resources/rspec/0.2',
-                  'xsi': 'http://www.w3.org/2001/XMLSchema-instance'
-                 }
-    schemas =  {'xsi': 'http://www.protogeni.net/resources/rspec/0.2 http://www.protogeni.net/resources/rspec/0.2/ad.xsd'
-            }
-    format = 'pg'
-    format = 'protogeni'
-    xml = None
+    version = pg_rspec_version
+    namespaces = {'rspecv2': version['namespace']}
 
     def get_network(self):
         network = None 
index fb96f74..2818501 100644 (file)
@@ -1,20 +1,11 @@
+from sfa.rspecs.sfa_rspec import sfa_rspec_version
+from sfa.rspecs.pg_rspec import pg_rspec_version
+
 
 ad_rspec_versions = [
-     { 'type':  'ProtoGENI',
-       'version': '2',
-       'schema': 'http://www.protogeni.net/resources/rspec/2/request.xsd',
-       'namespace': 'http://www.protogeni.net/resources/rspec/2',
-       'extenstions':  [
-         'http://www.protogeni.net/resources/rspec/ext/gre-tunnel/1',
-         'http://www.protogeni.net/resources/rspec/ext/other-ext/3']
-    },
-    { 'type': 'SFA',
-      'version': '1',
-      'schema': [],
-      'namespace': [],
-      'extensions': []
-    }
-]
+    pg_rspec_vesion,
+    sfa_rspec_version
+    ]
 
 request_rspec_versions = ad_rspec_versions
 
index d35fb78..fe80006 100755 (executable)
@@ -14,6 +14,7 @@ class RSpec:
     config = Config()
     xml = None
     type = None
+    version = None     
   
     def __init__(self, rspec="", namespaces={}):
         if rspec:
index bb90b25..dd7fe1f 100755 (executable)
@@ -10,9 +10,9 @@ class RSpecConverter:
     @staticmethod
     def to_sfa_rspec(in_rspec):
         rspec = parse_rspec(in_rspec)
-        if rspec.format == 'sfa': 
+        if rspec.version['type'] == 'sfa': 
           return in_rspec
-        elif rspec.format == 'pg':
+        elif rspec.version['type'] == 'protogeni':
             return PGRSpecConverter.to_sfa_rspec(in_rspec)
         else:
              return in_rspec 
@@ -20,9 +20,9 @@ class RSpecConverter:
     @staticmethod 
     def to_pg_rspec(in_rspec):
         rspec = parse_rspec(in_rspec)
-        if rspec.format == 'pg':
+        if rspec.version['type'] == 'protogeni': 
             return in_rspec
-        elif rspec.format == 'sfa':
+        elif rspec.version['type'] == 'sfa':
             return SfaRSpecConverter.to_pg_rspec(in_rspec)
         else:
             return in_rspec 
index 91f58e5..5625ec7 100755 (executable)
@@ -23,10 +23,10 @@ if __name__ == '__main__':
     
     print "Parsing SFA RSpec:", 
     rspec = parse_rspec('nodes.rspec')
-    print rspec.format
+    print rspec.version
     rspec = parse_rspec('protogeni.rspec')
     print "Parsing ProtoGENI RSpec:", 
-    print rspec.format
+    print rspec.version
     
     
 
index 1c8a599..b96a765 100755 (executable)
@@ -1,6 +1,5 @@
 #!/usr/bin/python
 from sfa.util.sfalogging import _SfaLogger
-from sfa.rspecs.pl_rspec_version import default_rspec_version 
 
 class RSpecVersion(dict):
 
@@ -16,7 +15,8 @@ class RSpecVersion(dict):
         dict.__init__(self, self.fields)
 
         if not version:
-            self.update(default_rspec_version)          
+            from sfa.rspecs.sfa_rspec import sfa_rspec_version
+            self.update(sfa_rspec_version)          
         elif isinstance(version, dict):
             self.update(version)
         elif isinstance(version, basestring):
index 8cf1c8b..830c853 100755 (executable)
@@ -8,11 +8,11 @@ from sfa.util.config import Config
 from sfa.rspecs.rspec_version import RSpecVersion  
 
 
-_version = { 'type': 'SFA', 
+_version = { 'type': 'sfa', 
              'version': '1' 
 }
 
-sfa_rspec_version = RSpecVersion(_sfa_rspec_version)
+sfa_rspec_version = RSpecVersion(_version)
 
 class SfaRSpec(RSpec):
     xml = None