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
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
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
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
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
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
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
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
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_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 []
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)
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)
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
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)
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
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
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
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
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
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
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
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
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
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