X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Fsfa_rspec_converter.py;fp=sfa%2Frspecs%2Fsfa_rspec_converter.py;h=6276004881bb52266793f0f700288f7c9023bd1f;hb=04a3f20dc71bf8b3f96b1e3172623aa346a638a7;hp=577b788d7a4e4cb5edde8c3127454854851508bb;hpb=c1c136b3042a24604823c6da135308b7c031c234;p=sfa.git diff --git a/sfa/rspecs/sfa_rspec_converter.py b/sfa/rspecs/sfa_rspec_converter.py index 577b788d..62760048 100755 --- a/sfa/rspecs/sfa_rspec_converter.py +++ b/sfa/rspecs/sfa_rspec_converter.py @@ -6,83 +6,96 @@ from sfa.util.xrn import hrn_to_urn from sfa.rspecs.rspec import RSpec from sfa.rspecs.version_manager import VersionManager + class SfaRSpecConverter: @staticmethod - def to_pg_rspec(rspec, content_type = None): + def to_pg_rspec(rspec, content_type=None): if not isinstance(rspec, RSpec): sfa_rspec = RSpec(rspec) else: sfa_rspec = rspec - + if not content_type or content_type not in \ - ['ad', 'request', 'manifest']: + ['ad', 'request', 'manifest']: content_type = sfa_rspec.version.content_type - - + version_manager = VersionManager() pg_version = version_manager._get_version('protogeni', '2', 'request') pg_rspec = RSpec(version=pg_version) - + # get networks networks = sfa_rspec.version.get_networks() - + for network in networks: # get nodes - sfa_node_elements = sfa_rspec.version.get_node_elements(network=network) + sfa_node_elements = sfa_rspec.version.get_node_elements( + network=network) for sfa_node_element in sfa_node_elements: # create node element node_attrs = {} node_attrs['exclusive'] = 'false' if 'component_manager_id' in sfa_node_element.attrib: - node_attrs['component_manager_id'] = sfa_node_element.attrib['component_manager_id'] + node_attrs['component_manager_id'] = sfa_node_element.attrib[ + 'component_manager_id'] else: - node_attrs['component_manager_id'] = hrn_to_urn(network, 'authority+cm') + node_attrs['component_manager_id'] = hrn_to_urn( + network, 'authority+cm') if 'component_id' in sfa_node_element.attrib: - node_attrs['compoenent_id'] = sfa_node_element.attrib['component_id'] + node_attrs['compoenent_id'] = sfa_node_element.attrib[ + 'component_id'] if sfa_node_element.find('hostname') != None: hostname = sfa_node_element.find('hostname').text node_attrs['component_name'] = hostname node_attrs['client_id'] = hostname - node_element = pg_rspec.xml.add_element('node', node_attrs) - + node_element = pg_rspec.xml.add_element('node', node_attrs) + if content_type == 'request': sliver_element = sfa_node_element.find('sliver') - sliver_type_elements = sfa_node_element.xpath('./sliver_type', namespaces=sfa_rspec.namespaces) - available_sliver_types = [element.attrib['name'] for element in sliver_type_elements] + sliver_type_elements = sfa_node_element.xpath( + './sliver_type', namespaces=sfa_rspec.namespaces) + available_sliver_types = [element.attrib[ + 'name'] for element in sliver_type_elements] valid_sliver_types = ['emulab-openvz', 'raw-pc'] - - # determine sliver type + + # determine sliver type requested_sliver_type = 'emulab-openvz' for available_sliver_type in available_sliver_types: if available_sliver_type in valid_sliver_types: requested_sliver_type = available_sliver_type - + if sliver_element != None: - pg_rspec.xml.add_element('sliver_type', {'name': requested_sliver_type}, parent=node_element) + pg_rspec.xml.add_element( + 'sliver_type', {'name': requested_sliver_type}, parent=node_element) else: # create node_type element for hw_type in ['plab-pc', 'pc']: - hdware_type_element = pg_rspec.xml.add_element('hardware_type', {'name': hw_type}, parent=node_element) + hdware_type_element = pg_rspec.xml.add_element( + 'hardware_type', {'name': hw_type}, parent=node_element) # create available element - pg_rspec.xml.add_element('available', {'now': 'true'}, parent=node_element) + pg_rspec.xml.add_element( + 'available', {'now': 'true'}, parent=node_element) # create locaiton element - # We don't actually associate nodes with a country. + # 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'] = location.get('country', 'unknown') - location_attrs['latitude'] = location.get('latitude', 'None') - location_attrs['longitude'] = location.get('longitude', 'None') - pg_rspec.xml.add_element('location', location_attrs, parent=node_element) + location_attrs = {} + location_attrs['country'] = location.get( + 'country', 'unknown') + location_attrs['latitude'] = location.get( + 'latitude', 'None') + location_attrs['longitude'] = location.get( + 'longitude', 'None') + pg_rspec.xml.add_element( + 'location', location_attrs, parent=node_element) return pg_rspec.toxml() if __name__ == '__main__': import sys - if len(sys.argv) > 1: + if len(sys.argv) > 1: print(SfaRSpecConverter.to_pg_rspec(sys.argv[1]))