X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Fpg_rspec_converter.py;h=1c57d7da48af0b112d2f74160cb774ebe8ec74bd;hb=57b6a99255d4a88be9c0f910f8524677e34ff4bc;hp=7ec6803f8e5e0c7b643ceeadfb888900e3bf47a0;hpb=0473953ee369f1aaaad6fa9a191ff420845bb231;p=sfa.git diff --git a/sfa/rspecs/pg_rspec_converter.py b/sfa/rspecs/pg_rspec_converter.py index 7ec6803f..1c57d7da 100755 --- a/sfa/rspecs/pg_rspec_converter.py +++ b/sfa/rspecs/pg_rspec_converter.py @@ -1,8 +1,9 @@ #!/usr/bin/python from lxml import etree from StringIO import StringIO -from sfa.util.xrn import * -from sfa.rspecs.pg_rspec import PGRSpec +from sfa.util.xrn import Xrn, urn_to_hrn +from sfa.rspecs.rspec import RSpec +from sfa.rspecs.version_manager import VersionManager xslt=''' @@ -33,43 +34,49 @@ transform=etree.XSLT(xslt_doc) class PGRSpecConverter: @staticmethod - def to_sfa_node(site, node, i=0): - cm_urn = node.get('component_manager_uuid') - c_name = node.get('component_name') - c_urn = node.get('component_uuid') - c_hrn, _ = urn_to_hrn(c_urn) - node_tag = etree.SubElement(site, "node") - node_tag.set("component_manager_uuid", cm_urn) - node_tag.set("component_name", c_name) - node_tag.set("component_uuid", c_urn) - hostname_tag = etree.SubElement(node_tag, "hostname").text = c_hrn - urn_tag = etree.SubElement(node_tag, "urn").text = c_hrn - for child in node.getchildren(): - node_tag.append(transform(child).getroot()) + def to_sfa_rspec(rspec, content_type = None): + if not isinstance(rspec, RSpec): + pg_rspec = RSpec(rspec) + else: + pg_rspec = rspec + + version_manager = VersionManager() + sfa_version = version_manager._get_version('sfa', '1') + sfa_rspec = RSpec(version=sfa_version) - @staticmethod - def to_sfa_network(pg_rspec, xml): - network_urn = pg_rspec.get_network() + # get network + network_urn = pg_rspec.version.get_network() network, _ = urn_to_hrn(network_urn) - nodes = pg_rspec.get_nodes() - network_tag = etree.SubElement(xml, "network") - network_tag.set("name", network) - network_tag.set("id", network) - site_tag = etree.SubElement(network_tag, "Site") - site_tag.set("id", network) - name = etree.SubElement(site_tag, "name").text = network - i = 0 - for node in nodes: - PGRSpecConverter.to_sfa_node(site_tag, node, i) + network_element = sfa_rspec.xml.add_element('network', {'name': network, 'id': network}) - @staticmethod - def to_sfa_rspec(rspec): - pg_rspec = PGRSpec(rspec=rspec) - header = '\n' - xml = etree.Element("RSpec", type="SFA") - PGRSpecConverter.to_sfa_network(pg_rspec, xml) - return header + etree.tostring(xml, pretty_print=True) + # get nodes + pg_nodes_elements = pg_rspec.version.get_node_elements() + nodes_with_slivers = pg_rspec.version.get_nodes_with_slivers() + i = 1 + for pg_node_element in pg_nodes_elements: + attribs = dict(pg_node_element.attrib.items()) + attribs['id'] = 'n'+str(i) + + node_element = sfa_rspec.xml.add_element('node', attribs, parent=network_element) + urn = pg_node_element.xpath('@component_id', namespaces=pg_rspec.namespaces) + if urn: + urn = urn[0] + hostname = Xrn.urn_split(urn)[-1] + hostname_element = sfa_rspec.xml.add_element('hostname', parent=node_element, text=hostname) + if hostname in nodes_with_slivers: + sfa_rspec.xml.add_element('sliver', parent=node_element) + + urn_element = sfa_rspec.xml.add_element('urn', parent=node_element, text=urn) + + # just copy over remaining child elements + for child in pg_node_element.getchildren(): + node_element.append(transform(child).getroot()) + i = i+1 + + return sfa_rspec.toxml() + if __name__ == '__main__': - rspec = 'protogeni.rspec' - print PGRSpecConverter.to_sfa_rspec(rspec) + import sys + if len(sys.argv) > 1: + print PGRSpecConverter.to_sfa_rspec(sys.argv[1])