add support for merging PG rspecs
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 18 May 2011 00:04:31 +0000 (20:04 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 18 May 2011 00:04:31 +0000 (20:04 -0400)
sfa/managers/slice_manager_pl.py
sfa/rspecs/pg_rspec.py
sfa/rspecs/rspec.py

index 1765179..065687d 100644 (file)
@@ -360,7 +360,6 @@ def ListResources(api, creds, options, call_id):
 
     # get the rspec's return format from options
     rspec_version = RSpecVersion(options.get('rspec_version'))
-    print dict(rspec_version)
     version_string = "rspec_%s" % (rspec_version.get_version_name())
 
     # look in cache first
@@ -391,17 +390,18 @@ def ListResources(api, creds, options, call_id):
                     
     results = threads.get_results()
     #results.append(open('/root/protogeni.rspec', 'r').read())
-    rspec = SfaRSpec()
+    rspec_version = RSpecVersion(my_opts.get('rspec_version'))
+    if rspec_version['type'].lower() == 'protogeni':
+        rspec = PGRSpec()
+    else:
+        rspec = SfaRSpec()
+
     for result in results:
+        print "RESULT"
         try:
-            tmp_rspec = parse_rspec(result)
-            if isinstance(tmp_rspec, SfaRSpec):
-                rspec.merge(result)
-            elif isinstance(tmp_rspec, PGRSpec):
-                rspec.merge(RSpecConverter.to_sfa_rspec(result))
-            else:
-                api.logger.info("SM.ListResources: invalid aggregate rspec")                        
+            rspec.merge(result)
         except:
+            raise
             api.logger.info("SM.ListResources: Failed to merge aggregate rspec")
 
     # cache the result
index a998f86..8418120 100755 (executable)
@@ -103,6 +103,19 @@ class PGRSpec(RSpec):
         pass
 
 
+    def merge(self, in_rspec):
+        """
+        Merge contents for specified rspec with current rspec
+        """
+        
+        # just copy over all the child elements under the root element
+        tree = etree.parse(StringIO(in_rspec))
+        root = tree.getroot()
+        for child in root.getchildren():
+            self.xml.append(child)
+                  
+    
+
 if __name__ == '__main__':
     rspec = PGRSpec()
     rspec.add_nodes([1])
index fe80006..de7e250 100755 (executable)
@@ -10,11 +10,11 @@ from sfa.util.faults import SfaNotImplemented, InvalidRSpec
 class RSpec:
     header = '<?xml version="1.0"?>\n'
     template = """<RSpec></RSpec>"""
-    namespaces = {}
     config = Config()
     xml = None
     type = None
-    version = None     
+    version = None
+    namespaces = None    
   
     def __init__(self, rspec="", namespaces={}):
         if rspec:
@@ -87,6 +87,8 @@ class RSpec:
                     if opt.text == value:
                         elem.remove(opt)
 
+    def merge(self, in_rspec):
+        pass
 
     def validate(self, schema):
         """