sfa.rspecs.rspec_version and GetVersion() updates
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Thu, 12 May 2011 20:22:12 +0000 (16:22 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Thu, 12 May 2011 20:22:12 +0000 (16:22 -0400)
sfa/client/sfi.py
sfa/managers/aggregate_manager_pl.py
sfa/managers/slice_manager_pl.py
sfa/plc/aggregate.py
sfa/rspecs/rspec_version.py [changed mode: 0644->0755]
sfa/util/version.py.in

index 9d55258..84c77d6 100755 (executable)
@@ -204,7 +204,7 @@ class Sfi:
                             default="all")
         # display formats
         if command in ("resources"):
-            parser.add_option("-r", "--rspec-version", dest="rspec_version", default="sfa 1",
+            parser.add_option("-r", "--rspec-version", dest="rspec_version", default="SFA 1",
                               help="schema type and version of resulting RSpec")
             parser.add_option("-f", "--format", dest="format", type="choice",
                              help="display format ([xml]|dns|ip)", default="xml",
index e44f7bf..311b07a 100644 (file)
@@ -23,19 +23,18 @@ 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.rspec_parser import parse_rspec 
 from sfa.util.sfatime import utcparse
 from sfa.util.callids import Callids
 
 def GetVersion(api):
     xrn=Xrn(api.hrn)
-    return version_core({'interface':'aggregate',
-                         'testbed':'myplc',
-                         'hrn':xrn.get_hrn(),
-                         'input_rspec' : ['PG 2', 'SFA 1'],
-                         'output_rspec' : ["SFA 1"],
-                         'ad_rspec' : ["PG 2", "SFA 1"],
-                         })
+    version_more = {'interface':'aggregate',
+                    'testbed':'myplc',
+                    'hrn':xrn.get_hrn()}
+    version_more.update(supported_rspecs)
+    return version_core(version_more)
 
 def __get_registry_objects(slice_xrn, creds, users):
     """
@@ -203,7 +202,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=RSpecVersion("pg"))
+    return aggregate.get_rspec(slice_xrn=slice_xrn, version=RSpecVersion("protogeni"))
 
 
 def RenewSliver(api, xrn, creds, expiration_time, call_id):
@@ -305,7 +304,7 @@ def ListResources(api, creds, options,call_id):
 
     # get the rspec's return format from options
     rspec_version = RSpecVersion(options.get('rspec_version', 'SFA 1'))
-    version_string = "rspec_%s_%s" % (rspec_version.format, rspec_version.version)
+    version_string = "rspec_%s" % (rspec_version.get_version_name())
     
     # look in cache first
     if caching and api.cache and not xrn:
index 01fd43b..acf7864 100644 (file)
@@ -28,6 +28,7 @@ import sfa.util.xmlrpcprotocol as xmlrpcprotocol
 import sfa.plc.peers as peers
 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.util.callids import Callids
 
 # we have specialized xmlrpclib.ServerProxy to remember the input url
@@ -44,11 +45,12 @@ 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)
-    sm_version=version_core({'interface':'slicemgr',
-                             'hrn' : xrn.get_hrn(),
-                             'urn' : xrn.get_urn(),
-                             'peers': peers,
-                             })
+    version_more = {'interface':'slicemgr',
+                    'hrn' : xrn.get_hrn(),
+                    'urn' : xrn.get_urn(),
+                    'peers': peers,}
+    version_more.update(supported_rspecs)     
+    sm_version=version_core(version_more)
     # local aggregate if present needs to have localhost resolved
     if api.hrn in api.aggregates:
         local_am_url=get_serverproxy_url(api.aggregates[api.hrn])
@@ -344,7 +346,7 @@ def ListResources(api, creds, options, call_id):
 
     # get the rspec's return format from options
     rspec_version = RSpecVersion(options.get('rspec_version', 'SFA 1'))
-    version_string = "rspec_%s_%s" % (rspec_version.format, rspec_version.version)
+    version_string = "rspec_%s" % (rspec_version.get_version_name())
 
     # look in cache first
     if caching and api.cache and not xrn:
index 1ba75d2..9626d31 100644 (file)
@@ -68,9 +68,10 @@ class Aggregate:
         self.prepare()
         rspec = None
         if version:
-            format = version.format
-            if format == 'pg':
+            if version['type'].lower() == 'protogeni':
                 rspec = PGRSpec()
+            elif version['type'].lower() == 'sfa':
+                rspec = SfaRSpec()
             else:
                 rspec = SfaRSpec()
         else: 
old mode 100644 (file)
new mode 100755 (executable)
index 5caa544..1c8a599
@@ -1,31 +1,42 @@
 #!/usr/bin/python
 from sfa.util.sfalogging import _SfaLogger
+from sfa.rspecs.pl_rspec_version import default_rspec_version 
 
+class RSpecVersion(dict):
 
-class RSpecVersion:
+    fields = {'type': None,
+              'version': None,
+              'schema': None,
+              'namespace': None,
+              'extensions': []
+        }
+    def __init__(self, version={}):
+        
+        self.logger = _SfaLogger('/var/log/sfa.log')
+        dict.__init__(self, self.fields)
 
-    format = 'sfa'
-    version = '1'
-    schema = None
-    namespace = None
-    extensions = []
+        if not version:
+            self.update(default_rspec_version)          
+        elif isinstance(version, dict):
+            self.update(version)
+        elif isinstance(version, basestring):
+            version_parts = version.split(' ')
+            num_parts = len(version_parts)
+            self['type'] = version_parts[0]
+            if num_parts > 1:
+                self['version'] = version_parts[1]
+        else:
+            logger.info("Unable to parse rspec version, using default")
 
-    def __init__(self, version_string):
-        self.logger = _SfaLogger('/var/log/sfa.log') 
-        self.parse_version_string(version_string)
+    def get_version_name(self):
+        return "%s %s" % (str(self['type']), str(self['version']))
 
-    def parse_version_string(self, version_string):
-        # version_raw is currently a string but will 
-        # eventually be a struct.
-        format_split = version_string.split(' ')
-        try: self.format = format_split[0].lower()  
-        except: pass
-        try: self.version = format_split[1]
-        except: pass
-    
+if __name__ == '__main__':
+
+    from sfa.rspecs.pl_rspec_version import ad_rspec_versions
+    for version in [RSpecVersion(), 
+                    RSpecVersion("SFA"), 
+                    RSpecVersion("SFA 1"),
+                    RSpecVersion(ad_rspec_versions[0])]: 
+        print version.get_version_name() + ": " + str(version)
 
-    def parse_version_struct(self, version_struct):
-        try:
-            pass
-        except:
-            pass
index 3749023..5291328 100644 (file)
@@ -2,7 +2,7 @@
 version_tag="@VERSIONTAG@"
 scm_url="@SCMURL@"
 import socket
-
 def version_core (more={}):
     core = { 'geni_api':1,
              'sfa' : 1,