implemented to_pg_rspec() method
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 11 May 2011 20:00:36 +0000 (16:00 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 11 May 2011 20:00:36 +0000 (16:00 -0400)
sfa/rspecs/sfa_rspec_converter.py [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 63d2693..9ae847a
@@ -1,8 +1,59 @@
 #!/usr/bin/python
 
-class SFARSpecConverter:
+from lxml import etree
+from StringIO import StringIO
+from sfa.util.xrn import *
+from sfa.rspecs.sfa_rspec import SfaRSpec
+from sfa.rspecs.pg_rspec import PGRSpec
+
+class SfaRSpecConverter:
 
     @staticmethod
-    def to_pg_rspec(in_rspec):
-        pass
+    def to_pg_rspec(rspec):
+        if isinstance(rspec, SfaRSpec):
+            sfa_rspec = rspec
+        else:
+            sfa_rspec = SfaRSpec(rspec=rspec)
+        pg_rspec = PGRSpec()
+    
+        # get networks
+        networks = sfa_rspec.get_networks()
+        
+        for network in networks:
+            # get nodes
+            sfa_node_elements = sfa_rspec.get_node_elements(network=network)
+            for sfa_node_element in sfa_node_elements:
+                # create node element
+                node_attrs = {}
+                node_attrs['component_manager_id'] = network
+                if sfa_node_element.find('hostname') != None:
+                    node_attrs['component_name'] = sfa_node_element.find('hostname').text
+                if sfa_node_element.find('urn') != None:    
+                    node_attrs['component_id'] = sfa_node_element.find('urn').text
+                node_element = pg_rspec.add_element('node', node_attrs)
+
+                # create node_type element
+                node_type_attrs = {'type_name': 'pcvm', 'type_slots': '100'}    
+                node_type_element = pg_rspec.add_element('node_type', node_type_attrs, parent=node_element)
+                # create available element
+                pg_rspec.add_element('available', parent=node_element, text='true')
+                # create exclusive element
+                pg_rspec.add_element('exclusive', parent=node_element, text='false')
+                # create locaiton element
+                # We don't actually associate nodes with a country. 
+                # Set country to "unknown" until we figure out how to make
+                # sure this value is always accurate.
+                location = sfa_node_element.find('location')
+                if location != None:
+                    location_attrs = {}      
+                    location_attrs['country'] = locatiton.get('country', 'unknown')
+                    location_attrs['latitude'] = location.get('latitiue', 'None')
+                    location_attrs['longitude'] = location.get('longitude', 'None')
+                    pg_rspec.add_element('location', location_attrs, parent=node_element)
+
+        return pg_rspec.toxml()
 
+if __name__ == '__main__':
+    import sys
+    if len(sys.argv) > 1:    
+        print SfaRSpecConverter.to_pg_rspec(sys.argv[1])