4 from StringIO import StringIO
5 from sfa.util.xrn import *
6 from sfa.rspecs.sfa_rspec import SfaRSpec
7 from sfa.rspecs.pg_rspec import PGRSpec
9 class SfaRSpecConverter:
12 def to_pg_rspec(rspec):
13 if isinstance(rspec, SfaRSpec):
16 sfa_rspec = SfaRSpec(rspec=rspec)
20 networks = sfa_rspec.get_networks()
22 for network in networks:
24 sfa_node_elements = sfa_rspec.get_node_elements(network=network)
25 for sfa_node_element in sfa_node_elements:
28 node_attrs['component_manager_id'] = network
29 if sfa_node_element.find('hostname') != None:
30 node_attrs['component_name'] = sfa_node_element.find('hostname').text
31 if sfa_node_element.find('urn') != None:
32 node_attrs['component_id'] = sfa_node_element.find('urn').text
33 node_element = pg_rspec.add_element('node', node_attrs)
35 # create node_type element
36 node_type_attrs = {'type_name': 'pcvm', 'type_slots': '100'}
37 node_type_element = pg_rspec.add_element('node_type', node_type_attrs, parent=node_element)
38 # create available element
39 pg_rspec.add_element('available', parent=node_element, text='true')
40 # create exclusive element
41 pg_rspec.add_element('exclusive', parent=node_element, text='false')
42 # create locaiton element
43 # We don't actually associate nodes with a country.
44 # Set country to "unknown" until we figure out how to make
45 # sure this value is always accurate.
46 location = sfa_node_element.find('location')
49 location_attrs['country'] = locatiton.get('country', 'unknown')
50 location_attrs['latitude'] = location.get('latitiue', 'None')
51 location_attrs['longitude'] = location.get('longitude', 'None')
52 pg_rspec.add_element('location', location_attrs, parent=node_element)
54 return pg_rspec.toxml()
56 if __name__ == '__main__':
59 print SfaRSpecConverter.to_pg_rspec(sys.argv[1])