示例#1
0
    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
示例#2
0
    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)
示例#3
0
    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
示例#4
0
    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)
示例#5
0
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
示例#6
0
 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)