예제 #1
0
    def __get_resources(self, peer):
        try:
            # Retrieve the URI for domain:RMs identification purposes
            adaptor, adaptor_uri = AdaptorFactory.create_from_db(peer)
            # HACK to modify the adaptor by removing its default handler
            # (XMLRPC's ServerProxy) when none is provided
            if peer.get("endpoint") == "/":
                adaptor._ServerProxy__handler = ""
            self.info("RM-Adaptor=%s" % (adaptor,))

            geni_v3_credentials = AdaptorFactory.geni_v3_credentials()
            self.info("Credentials successfully retrieved!")
            available = False
            # Resource detector is the only one generating "inner calls"
            # against M/RO to fetch all resources
            # (but virtual links -- linked to the "available" flag)
            inner_call = True
            resources_returned = adaptor.list_resources(geni_v3_credentials,
                                                        available, inner_call)
            return (resources_returned, adaptor_uri)

        except Exception as e:
            self.error("get_resources (%s) exception: %s" % (
                peer.get("type"), str(e),))
            return None, None
예제 #2
0
    def __get_resources(self, peer):
        try:
            # Retrieve the URI for domain:RMs identification purposes
            adaptor, adaptor_uri = AdaptorFactory.create_from_db(peer)
            # HACK to modify the adaptor by removing its default handler
            # (XMLRPC's ServerProxy) when none is provided
            if peer.get("endpoint") == "/":
                adaptor._ServerProxy__handler = ""
            self.info("RM-Adaptor=%s" % (adaptor, ))

            geni_v3_credentials = AdaptorFactory.geni_v3_credentials()
            self.info("Credentials successfully retrieved!")
            available = False
            # Resource detector is the only one generating "inner calls"
            # against M/RO to fetch all resources
            # (but virtual links -- linked to the "available" flag)
            inner_call = True
            resources_returned = adaptor.list_resources(
                geni_v3_credentials, available, inner_call)
            return (resources_returned, adaptor_uri)

        except Exception as e:
            self.error("get_resources (%s) exception: %s" % (
                peer.get("type"),
                str(e),
            ))
            return None, None
예제 #3
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 = OFv3ManifestParser(from_string=m)
            logger.debug("OFv3ManifestParser=%s" % (manifest, ))
            self.validate_rspec(manifest.get_rspec())

            slivers = manifest.slivers()
            logger.info("Slivers(%d)=%s" % (
                len(slivers),
                slivers,
            ))

            return ({"slivers": slivers}, urn)
        except Exception as e:
            # It is possible that SDNRM does not implement this method!
            if beffort:
                logger.error("manage_provision exception: %s", e)
                return ({"slivers": []}, [])
            else:
                logger.critical("manage_provision exception: %s", e)
                raise e
예제 #4
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 = CRMv3ManifestParser(from_string=m)
            logger.debug("CRMv3ManifestParser=%s" % (manifest, ))
            self.validate_rspec(manifest.get_rspec())

            nodes = manifest.nodes()
            logger.info("Nodes(%d)=%s" % (
                len(nodes),
                nodes,
            ))

            # XXX Begin: temporal correction (defaul: geni_best_effort)
            # TODO Remove after CRM-KVM returns proper structure
            #  with geni_slivers
            # XXX End: temporal hack
            urn = urn or []
            # XXX End: temporal correction
            return ({"nodes": nodes}, urn)
        except Exception as e:
            # It is possible that CRM does not implement this method!
            if beffort:
                logger.error("manage_provision exception: %s", e)
                return ({"nodes": []}, [])
            else:
                logger.critical("manage_provision exception: %s", e)
                raise e
예제 #5
0
파일: commons.py 프로젝트: ict-felix/stack
 def manage_operational_action(peer, urns, creds, action, beffort):
     try:
         adaptor, uri = AdaptorFactory.create_from_db(peer)
         logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
         return adaptor.perform_operational_action(
             # urns, creds[0]["geni_value"], action, beffort)
             urns,
             creds,
             action,
             beffort,
         )
     except Exception as e:
         # It is possible that some RMs do not implement particular actions
         # e.g. "geni_update_users", etc.
         # http://groups.geni.net/geni/wiki/GAPI_AM_API_V3/
         #  CommonConcepts#SliverOperationalActions
         if beffort:
             if action not in ["geni_start", "geni_stop", "geni_restart"]:
                 raise e
             else:
                 logger.error("manage_operational_action exception: " + "action=%s, details: %s" % (action, e))
                 return []
         else:
             logger.critical("manage_operational_action exception: " + "action=%s, details: %s" % (action, e))
             raise e
예제 #6
0
파일: tn.py 프로젝트: dana-i2cat/felix
    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 = TNRMv3ManifestParser(from_string=m)
            logger.debug("TNRMv3ManifestParser=%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
예제 #7
0
파일: tn.py 프로젝트: dana-i2cat/felix
    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 = TNRMv3ManifestParser(from_string=m)
            logger.debug("TNRMv3ManifestParser=%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 TNRM 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
예제 #8
0
파일: com.py 프로젝트: ict-felix/stack
    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)
                urns, creds, beffort, etime, gusers)

            manifest = CRMv3ManifestParser(from_string=m)
            logger.debug("CRMv3ManifestParser=%s" % (manifest,))
            self.validate_rspec(manifest.get_rspec())

            nodes = manifest.nodes()
            logger.info("Nodes(%d)=%s" % (len(nodes), nodes,))

            # XXX Begin: temporal correction (defaul: geni_best_effort)
            # TODO Remove after CRM-KVM returns proper structure
            #  with geni_slivers
            # XXX End: temporal hack
            urn = urn or []
            # XXX End: temporal correction
            return ({"nodes": nodes}, urn)
        except Exception as e:
            # It is possible that CRM does not implement this method!
            if beffort:
                logger.error("manage_provision exception: %s", e)
                return ({"nodes": []}, [])
            else:
                logger.critical("manage_provision exception: %s", e)
                raise e
예제 #9
0
파일: se.py 프로젝트: ict-felix/stack
    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
예제 #10
0
파일: commons.py 프로젝트: HalasNet/felix
 def manage_status(peer, urns, creds):
     try:
         adaptor, uri = AdaptorFactory.create_from_db(peer)
         logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
         return adaptor.status(urns, creds[0]["geni_value"])
     except Exception as e:
         logger.error("manage_status exception: %s", e)
         return []
예제 #11
0
 def send_request_allocate_rspec(routing_key, req_rspec, slice_urn,
                                 credentials, end_time):
     peer = db_sync_manager.get_configured_peer_by_routing_key(routing_key)
     logger.debug("Peer=%s" % (peer, ))
     adaptor, uri = AdaptorFactory.create_from_db(peer)
     logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
     return adaptor.allocate(slice_urn, credentials[0]["geni_value"],
                             str(req_rspec), end_time)
예제 #12
0
 def manage_status(peer, urns, creds):
     try:
         adaptor, uri = AdaptorFactory.create_from_db(peer)
         logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
         return adaptor.status(urns, creds[0]["geni_value"])
     except Exception as e:
         logger.error("manage_status exception: %s", e)
         return []
예제 #13
0
파일: commons.py 프로젝트: HalasNet/felix
 def send_request_allocate_rspec(routing_key, req_rspec, slice_urn,
                                 credentials, end_time):
     peer = db_sync_manager.get_configured_peer_by_routing_key(routing_key)
     logger.debug("Peer=%s" % (peer,))
     adaptor, uri = AdaptorFactory.create_from_db(peer)
     logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
     return adaptor.allocate(
         slice_urn, credentials[0]["geni_value"], str(req_rspec), end_time)
예제 #14
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"])
         ret = self.generate_internal_return(m)
         return (ret, urn, ss)
     except Exception as e:
         logger.critical("manage_describe exception: %s", e)
         raise e
예제 #15
0
파일: ro.py 프로젝트: HalasNet/felix
 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"])
         ret = self.generate_internal_return(m)
         return (ret, urn, ss)
     except Exception as e:
         logger.critical("manage_describe exception: %s", e)
         raise e
예제 #16
0
파일: jobs.py 프로젝트: HalasNet/felix
def slice_expiration(urns):
    logger.info("slice expiration timeout: %s" % (urns, ))
    ro_slivers = []

    route = db_sync_manager.get_slice_routing_keys(urns)
    logger.debug("Route=%s" % (route, ))

    for r, v in route.iteritems():
        peer = db_sync_manager.get_configured_peer_by_routing_key(r)
        logger.debug("peer=%s" % (peer, ))
        adaptor = AdaptorFactory.create_from_db(peer)
        geni_v3_creds = AdaptorFactory.geni_v3_credentials()
        of_slivers = adaptor.delete(urns, geni_v3_creds, False)

        logger.debug("of_s=%s" % (of_slivers, ))
        ro_slivers.extend(of_slivers)

    db_urns = [s.get("geni_sliver_urn") for s in ro_slivers]
    logger.debug("RO-Slivers=%s, DB-URNs=%s" % (ro_slivers, db_urns))
    db_sync_manager.delete_slice_urns(db_urns)
예제 #17
0
파일: jobs.py 프로젝트: dana-i2cat/felix
def slice_expiration(urns):
    logger.info("slice expiration timeout: %s" % (urns, ))
    ro_slivers = []

    route = db_sync_manager.get_slice_routing_keys(urns)
    logger.debug("Route=%s" % (route, ))

    for r, v in route.iteritems():
        peer = db_sync_manager.get_configured_peer_by_routing_key(r)
        logger.debug("peer=%s" % (peer, ))
        adaptor = AdaptorFactory.create_from_db(peer)
        geni_v3_creds = AdaptorFactory.geni_v3_credentials()
        of_slivers = adaptor.delete(urns, geni_v3_creds, False)

        logger.debug("of_s=%s" % (of_slivers, ))
        ro_slivers.extend(of_slivers)

    db_urns = [s.get("geni_sliver_urn") for s in ro_slivers]
    logger.debug("RO-Slivers=%s, DB-URNs=%s" % (ro_slivers, db_urns))
    db_sync_manager.delete_slice_urns(db_urns)
예제 #18
0
파일: commons.py 프로젝트: HalasNet/felix
 def manage_delete(peer, urns, creds, beffort):
     try:
         adaptor, uri = AdaptorFactory.create_from_db(peer)
         logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
         return adaptor.delete(urns, creds[0]["geni_value"], beffort)
     except Exception as e:
         if beffort:
             logger.error("manage_delete exception: %s" % (e,))
             return []
         else:
             logger.critical("manage_delete exception: %s" % (e,))
             raise e
예제 #19
0
 def manage_delete(peer, urns, creds, beffort):
     try:
         adaptor, uri = AdaptorFactory.create_from_db(peer)
         logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
         return adaptor.delete(urns, creds[0]["geni_value"], beffort)
     except Exception as e:
         if beffort:
             logger.error("manage_delete exception: %s" % (e, ))
             return []
         else:
             logger.critical("manage_delete exception: %s" % (e, ))
             raise e
예제 #20
0
파일: commons.py 프로젝트: ict-felix/stack
 def manage_renew(peer, urns, creds, etime, beffort):
     try:
         adaptor, uri = AdaptorFactory.create_from_db(peer)
         logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
         # return adaptor.renew(urns, creds[0]["geni_value"],
         #                       etime, beffort)
         return adaptor.renew(urns, creds, etime, beffort)
     except Exception as e:
         if beffort:
             logger.error("manage_renew exception: %s", e)
             return []
         else:
             logger.critical("manage_renew exception: %s", e)
             raise e
예제 #21
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)
         ret = self.generate_internal_return(m)
         return (ret, urn)
     except Exception as e:
         # It is possible that RO does not implement this method!
         if beffort:
             logger.error("manage_provision exception: %s", e)
             return (ret, [])
         else:
             logger.critical("manage_provision exception: %s", e)
             raise e
예제 #22
0
파일: ro.py 프로젝트: HalasNet/felix
 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)
         ret = self.generate_internal_return(m)
         return (ret, urn)
     except Exception as e:
         # It is possible that RO does not implement this method!
         if beffort:
             logger.error("manage_provision exception: %s", e)
             return (ret, [])
         else:
             logger.critical("manage_provision exception: %s", e)
             raise e
예제 #23
0
파일: com.py 프로젝트: ict-felix/stack
    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)

            manifest = CRMv3ManifestParser(from_string=m)
            logger.debug("CRMv3ManifestParser=%s" % (manifest,))
            self.validate_rspec(manifest.get_rspec())

            nodes = manifest.nodes()
            logger.info("Nodes(%d)=%s" % (len(nodes), nodes,))

            return ({"nodes": nodes}, urn, ss)
        except Exception as e:
            logger.critical("manage_describe exception: %s", e)
            raise e
예제 #24
0
파일: sdn.py 프로젝트: HalasNet/felix
    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 = OFv3ManifestParser(from_string=m)
            logger.debug("OFv3ManifestParser=%s" % (manifest,))
            self.validate_rspec(manifest.get_rspec())

            slivers = manifest.slivers()
            logger.info("Slivers(%d)=%s" % (len(slivers), slivers,))

            return ({"slivers": slivers}, urn, ss)
        except Exception as e:
            logger.critical("manage_describe exception: %s", e)
            raise e
예제 #25
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 = OFv3ManifestParser(from_string=m)
            logger.debug("OFv3ManifestParser=%s" % (manifest, ))
            self.validate_rspec(manifest.get_rspec())

            slivers = manifest.slivers()
            logger.info("Slivers(%d)=%s" % (
                len(slivers),
                slivers,
            ))

            return ({"slivers": slivers}, urn, ss)
        except Exception as e:
            logger.critical("manage_describe exception: %s", e)
            raise e
예제 #26
0
 def manage_operational_action(peer, urns, creds, action, beffort):
     try:
         adaptor, uri = AdaptorFactory.create_from_db(peer)
         logger.debug("Adaptor=%s, uri=%s" % (adaptor, uri))
         return adaptor.perform_operational_action(urns,
                                                   creds[0]["geni_value"],
                                                   action, beffort)
     except Exception as e:
         # It is possible that some RMs do not implement particular actions
         # e.g. "geni_update_users", etc.
         # http://groups.geni.net/geni/wiki/GAPI_AM_API_V3/
         #  CommonConcepts#SliverOperationalActions
         if beffort:
             if action not in ["geni_start", "geni_stop", "geni_restart"]:
                 raise e
             else:
                 logger.error("manage_operational_action exception: " +
                              "action=%s, details: %s" % (action, e))
                 return []
         else:
             logger.critical("manage_operational_action exception: " +
                             "action=%s, details: %s" % (action, e))
             raise e
예제 #27
0
파일: sdn.py 프로젝트: ict-felix/stack
    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)
                urns, creds, beffort, etime, gusers)

            manifest = OFv3ManifestParser(from_string=m)
            logger.debug("OFv3ManifestParser=%s" % (manifest,))
            self.validate_rspec(manifest.get_rspec())

            slivers = manifest.slivers()
            logger.info("Slivers(%d)=%s" % (len(slivers), slivers,))

            return ({"slivers": slivers}, urn)
        except Exception as e:
            # It is possible that SDNRM does not implement this method!
            if beffort:
                logger.error("manage_provision exception: %s", e)
                return ({"slivers": []}, [])
            else:
                logger.critical("manage_provision exception: %s", e)
                raise e