def provision(self, urns, client_cert, credentials, best_effort, end_time, geni_users): """Documentation see [geniv3rpc] GENIv3DelegateBase. {geni_users} is not relevant here.""" se_manifest, se_slivers, last_slice = SERMv3ManifestFormatter(), [], "" slivers=[] for urn in urns: if self._verify_users: logger.debug("provision: authenticate the user...") client_urn, client_uuid, client_email =\ self.auth(client_cert, credentials, urn, ("renewsliver",)) logger.info("Client urn=%s, uuid=%s, email=%s" % ( client_urn, client_uuid, client_email,)) logger.info("urn=%s, best_effort=%s, end_time=%s, geni_users=%s" % ( urn, best_effort, end_time, geni_users,)) links_db, nodes, links = self.SESlices.get_link_db(urn) sliceVlansPairs = self.SESlices.get_slice_vlan_pairs(urn) self.SESlices._create_manifest_from_req_n_and_l(se_manifest, nodes,links, sliceVlansPairs) # reservation_ports = self.SESlices._allocate_ports_in_slice(nodes)["ports"] reservation_ports = self.SESlices._allocate_ports_in_slice(nodes=nodes, slice_urn=urn)["ports"] if end_time != None: alarm_time = end_time SESchedulerService.get_scheduler().add_job( se_job_unprovision, "date", run_date=alarm_time, args=[datetime.now(), links_db, urn]) # Retrieve allocation status and modify after the method's operation links_db, _, _ = self.__update_fetch_allocation_status_slivers(urn, "geni_provisioned") if end_time != None: alarm_time = end_time SESchedulerService.get_scheduler().add_job( se_job_unprovision, "date", run_date=alarm_time, args=[datetime.now(), links_db, urn]) for sliver in links_db["geni_sliver_urn"]: slivers.append( { "geni_sliver_urn": sliver, "geni_expires": end_time, "geni_allocation_status": links_db["geni_allocation_status"], "geni_operational_status": links_db["geni_operational_status"], } ) logger.info("provision successfully completed: %s", urn) return str(se_manifest), slivers
def provision(self, urns, client_cert, credentials, best_effort, end_time, geni_users): """Documentation see [geniv3rpc] GENIv3DelegateBase. {geni_users} is not relevant here.""" se_manifest, se_slivers, last_slice = SERMv3ManifestFormatter(), [], "" slivers=[] for urn in urns: if self._verify_users: logger.debug("provision: authenticate the user...") client_urn, client_uuid, client_email =\ self.auth(client_cert, credentials, urn, ("renewsliver",)) logger.info("Client urn=%s, uuid=%s, email=%s" % ( client_urn, client_uuid, client_email,)) logger.info("urn=%s, best_effort=%s, end_time=%s, geni_users=%s" % ( urn, best_effort, end_time, geni_users,)) links_db, nodes, links = self.SESlices.get_link_db(urn) sliceVlansPairs = self.SESlices.get_slice_vlan_pairs(urn) self.SESlices._create_manifest_from_req_n_and_l(se_manifest, nodes,links, sliceVlansPairs) reservation_ports = self.SESlices._allocate_ports_in_slice(nodes)["ports"] if end_time != None: alarm_time = end_time SESchedulerService.get_scheduler().add_job( se_job_unprovision, "date", run_date=alarm_time, args=[datetime.now(), links_db, urn]) # Retrieve allocation status and modify after the method's operation links_db, _, _ = self.__update_fetch_allocation_status_slivers(urn, "geni_provisioned") if end_time != None: alarm_time = end_time SESchedulerService.get_scheduler().add_job( se_job_unprovision, "date", run_date=alarm_time, args=[datetime.now(), links_db, urn]) for sliver in links_db["geni_sliver_urn"]: slivers.append( { "geni_sliver_urn": sliver, "geni_expires": end_time, "geni_allocation_status": links_db["geni_allocation_status"], "geni_operational_status": links_db["geni_operational_status"], } ) logger.info("provision successfully completed: %s", urn) return str(se_manifest), slivers
def allocate(self, slice_urn, client_cert, credentials, rspec, end_time=None): """Documentation see [geniv3rpc] GENIv3DelegateBase.""" # TODO: Check if sliver_urn is valid for RO result = [] #Default end time = 30 days default_end_time = datetime.now() + timedelta(days=30) if end_time == None: end_time = default_end_time if self._verify_users: logger.debug("allocate: authenticate the user...") client_urn, client_uuid, client_email =\ self.auth(client_cert, credentials, slice_urn, ("createsliver",)) logger.info("Client urn=%s, uuid=%s, email=%s" % ( client_urn, client_uuid, client_email, )) logger.info("slice_urn=%s, end_time=%s, rspec=%s" % ( slice_urn, end_time, rspec, )) req_rspec = SERMv3RequestParser(from_string=rspec) self.__validate_rspec(req_rspec.get_rspec()) se_manifest, se_slivers, se_db_slivers = SERMv3ManifestFormatter( ), [], [] links = req_rspec.links() nodes = req_rspec.nodes() # Workaround for "1:n" case: Get Vlan pairs from link->felix:vlan param sliceVlansPairs = req_rspec.getVlanPairs() # check if the requested resources (ports, vlans) are available reservation_ports = self.SESlices._allocate_ports_in_slice(nodes) availability_result = self.SEResources.check_available_resources( reservation_ports['ports']) # print "WWWW: ", self.SEResources.get_port_mapping() if availability_result != False: # Mark resources as reserved self.SEResources.set_resource_reservation( reservation_ports['ports']) if end_time != None: alarm_time = end_time SESchedulerService.get_scheduler().add_job( se_job_release_resources, "date", run_date=alarm_time, args=[ datetime.now(), reservation_ports['ports'], slice_urn ]) self.SESlices._create_manifest_from_req_n_and_l( se_manifest, nodes, links, sliceVlansPairs) logger.debug("SE-ManifestFormatter=%s" % (se_manifest, )) s = self.SESlices._allocate_ports_in_slice(nodes) self.SESlices.set_link_db(slice_urn, end_time, links, nodes, sliceVlansPairs) links_db, nodes, links = self.SESlices.get_link_db(slice_urn) for sliver in links_db["geni_sliver_urn"]: result.append({ "geni_sliver_urn": sliver, "geni_expires": links_db['geni_expires'], "geni_allocation_status": links_db["geni_allocation_status"], "geni_operational_status": links_db["geni_operational_status"] }) se_slivers = result logger.info("allocate successfully completed: %s", slice_urn) logger.debug("requested SE-Sliver(%d)=%s" % ( len(se_slivers), se_slivers, )) return ("%s" % se_manifest, se_slivers) else: raise geni_ex.GENIv3GeneralError( "Allocation Failed. Requested resources are not available.")
def allocate(self, slice_urn, client_cert, credentials, rspec, end_time=None): """Documentation see [geniv3rpc] GENIv3DelegateBase.""" # TODO: Check if sliver_urn is valid for RO result = [] #Default end time = 30 days default_end_time = datetime.now() + timedelta(days=30) if end_time == None: end_time = default_end_time if self._verify_users: logger.debug("allocate: authenticate the user...") client_urn, client_uuid, client_email =\ self.auth(client_cert, credentials, slice_urn, ("createsliver",)) logger.info("Client urn=%s, uuid=%s, email=%s" % ( client_urn, client_uuid, client_email,)) logger.info("slice_urn=%s, end_time=%s, rspec=%s" % ( slice_urn, end_time, rspec,)) req_rspec = SERMv3RequestParser(from_string=rspec) self.__validate_rspec(req_rspec.get_rspec()) se_manifest, se_slivers, se_db_slivers = SERMv3ManifestFormatter(), [], [] links = req_rspec.links() nodes = req_rspec.nodes() # Workaround for "1:n" case: Get Vlan pairs from link->felix:vlan param sliceVlansPairs = req_rspec.getVlanPairs() # check if the requested resources (ports, vlans) are available reservation_ports = self.SESlices._allocate_ports_in_slice(nodes) availability_result = self.SEResources.check_available_resources(reservation_ports['ports']) # print "WWWW: ", self.SEResources.get_port_mapping() if availability_result != False: # Mark resources as reserved self.SEResources.set_resource_reservation(reservation_ports['ports']) if end_time != None: alarm_time = end_time SESchedulerService.get_scheduler().add_job( se_job_release_resources, "date", run_date=alarm_time, args=[datetime.now(), reservation_ports['ports'], slice_urn]) self.SESlices._create_manifest_from_req_n_and_l(se_manifest, nodes,links, sliceVlansPairs) logger.debug("SE-ManifestFormatter=%s" % (se_manifest,)) s = self.SESlices._allocate_ports_in_slice(nodes) self.SESlices.set_link_db(slice_urn, end_time,links, nodes, sliceVlansPairs) links_db, nodes, links = self.SESlices.get_link_db(slice_urn) for sliver in links_db["geni_sliver_urn"]: result.append( { "geni_sliver_urn": sliver, "geni_expires": links_db['geni_expires'], "geni_allocation_status": links_db["geni_allocation_status"], "geni_operational_status" : links_db["geni_operational_status"] } ) se_slivers = result logger.info("allocate successfully completed: %s", slice_urn) logger.debug("requested SE-Sliver(%d)=%s" % (len(se_slivers), se_slivers,)) return ("%s" % se_manifest, se_slivers) else: raise geni_ex.GENIv3GeneralError("Allocation Failed. Requested resources are not available.")