def manage_provision(self, peer, urns, creds, beffort, etime, gusers): try: adaptor, uri = AdaptorFactory.create_from_db(peer) logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri)) m, urn = adaptor.provision( urns, creds[0]["geni_value"], beffort, etime, gusers) manifest = SERMv3ManifestParser(from_string=m) logger.debug("SERMv3ManifestParser=%s" % (manifest,)) self.validate_rspec(manifest.get_rspec()) nodes = manifest.nodes() logger.info("Nodes(%d)=%s" % (len(nodes), nodes,)) links = manifest.links() logger.info("Links(%d)=%s" % (len(links), links,)) return ({"nodes": nodes, "links": links}, urn) except Exception as e: # It is possible that SERM does not implement this method! if beffort: logger.error("manage_provision exception: %s", e) return ({"nodes": [], "links": []}, []) else: logger.critical("manage_provision exception: %s", e) raise e
def manage_allocate(self, surn, creds, end, sdn_info, tn_info): route = {} self.__update_info_route(route, sdn_info, "dpids") logger.debug("SE-SdnInfo(%d)=%s" % (len(sdn_info), sdn_info,)) self.__update_info_route(route, tn_info, "interface") logger.debug("SE-TnInfo(%d)=%s" % (len(tn_info), tn_info,)) self.__update_route_rspec(route, sdn_info, tn_info) logger.info("Route=%s" % (route,)) manifests, slivers, db_slivers = [], [], [] for k, v in route.iteritems(): try: (m, ss) =\ self.send_request_allocate_rspec(k, v, surn, creds, end) manifest = SERMv3ManifestParser(from_string=m) logger.debug("SERMv3ManifestParser=%s" % (manifest,)) self.validate_rspec(manifest.get_rspec()) nodes = manifest.nodes() logger.info("Nodes(%d)=%s" % (len(nodes), nodes,)) links = manifest.links() logger.info("Links(%d)=%s" % (len(links), links,)) manifests.append({"nodes": nodes, "links": links}) self.extend_slivers(ss, k, slivers, db_slivers) except Exception as e: logger.critical("manage_allocate exception: %s", e) raise delegate_ex.AllocationError( str(e), surn, slivers, db_slivers) return (manifests, slivers, db_slivers)
def manage_describe(self, peer, urns, creds): try: adaptor, uri = AdaptorFactory.create_from_db(peer) logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri)) m, urn, ss = adaptor.describe(urns, creds[0]["geni_value"]) manifest = SERMv3ManifestParser(from_string=m) logger.debug("SERMv3ManifestParser=%s" % (manifest, )) self.validate_rspec(manifest.get_rspec()) nodes = manifest.nodes() logger.info("Nodes(%d)=%s" % ( len(nodes), nodes, )) links = manifest.links() logger.info("Links(%d)=%s" % ( len(links), links, )) return ({"nodes": nodes, "links": links}, urn, ss) except Exception as e: logger.critical("manage_describe exception: %s", e) raise e
def manage_direct_allocate(self, surn, creds, end, nodes, links): route = {} self.__update_node_route(route, nodes) logger.debug("Nodes(%d)=%s" % ( len(nodes), nodes, )) self.__update_link_route(route, links) logger.debug("Links(%d)=%s" % ( len(links), links, )) # XXX_FIXME_XXX: the SERM requires a new field in the link attribute # (felix:vlan). This is not compatible with the GENI world... self.__update_link_with_vlantag(nodes, links) logger.warning("Updated Links(%d)=%s" % ( len(links), links, )) self.__update_direct_route_rspec(route, nodes, links) logger.info("Route=%s" % (route, )) manifests, slivers, db_slivers = [], [], [] for k, v in route.iteritems(): try: (m, ss) =\ self.send_request_allocate_rspec(k, v, surn, creds, end) manifest = SERMv3ManifestParser(from_string=m) logger.debug("SERMv3ManifestParser=%s" % (manifest, )) self.validate_rspec(manifest.get_rspec()) nodes = manifest.nodes() logger.info("Nodes(%d)=%s" % ( len(nodes), nodes, )) links = manifest.links() logger.info("Links(%d)=%s" % ( len(links), links, )) manifests.append({"nodes": nodes, "links": links}) self.extend_slivers(ss, k, slivers, db_slivers) except Exception as e: logger.critical("manage_direct_allocate exception: %s", e) raise delegate_ex.AllocationError(str(e), surn, slivers, db_slivers) return (manifests, slivers, db_slivers)
def main(argv=None): if not argv: argv = sys.argv print 'Start the test environment' print '=== SERMv3RequestParser: request_rspec_example.xml ===' rspec = SERMv3RequestParser("request_rspec_example.xml") in_validate(rspec.get_rspec()) print '=== SERMv3RequestParser: request_rspec_example-1.xml ===' rspec = SERMv3RequestParser("request_rspec_example-1.xml") in_validate(rspec.get_rspec()) print '=== SERMv3ManifestParser: manifest_rspec_example.xml ===' rspec = SERMv3ManifestParser("manifest_rspec_example.xml") in_validate(rspec.get_rspec()) print 'Bye Bye...' return True
def __init__(self, from_file=None, from_string=None): super(ROManifestParser, self).__init__(from_file, from_string) self.__com_parser = CRMv3ManifestParser(from_file, from_string) self.__of_parser = OFv3ManifestParser(from_file, from_string) self.__se_parser = SERMv3ManifestParser(from_file, from_string) self.__tn_parser = TNRMv3ManifestParser(from_file, from_string)