def Provision(self, urns, credentials, options): geni_best_effort = self._option(options, "geni_best_effort", ret=True) geni_users = self._option(options, "geni_users", ret=[]) # Expiration in credentials expiration = geni_creds.get_cred_exp(logger, credentials[0]["geni_value"]) # Expiration in slice slice_resources = db_sync_manager.get_slices(urns[0]) # Convert expiration date in slice credential to expected datetime format try: # Expiration in slice (from Allocate reservation) expiration = slice_resources["slivers"]["geni_expires"] expiration = dates.rfc3339_to_datetime(expiration) expiration = dates.datetime_to_rfc3339(expiration) except: pass if "geni_end_time" in options: expiration = max(expiration, dates.rfc3339_to_datetime(options["geni_end_time"])) # TODO check the end_time against the duration of the credential try: self._checkRSpecVersion(options["geni_rspec_version"]) r_rspec, r_sliver_list = self._delegate.provision( urns, self.requestCertificate(), credentials, geni_best_effort, expiration, geni_users) result = {"geni_rspec": r_rspec, "geni_slivers": self._convertExpiresDate(r_sliver_list)} except Exception as e: return self._errorReturn(e) return self._successReturn(result)
def _convertExpiresDate(self, sliver_list): for slhash in sliver_list: if slhash["geni_expires"] is None: continue if not dates.is_date_or_rfc3339(slhash["geni_expires"]): raise ValueError("Given geni_expires in sliver_list hash " + "retrieved from delegate's method is not " + "a python datetime object.") # If date received is "datetime.datetime", convert to rfc3339 if dates.is_date(slhash["geni_expires"]): slhash["geni_expires"] =\ dates.datetime_to_rfc3339(slhash["geni_expires"]) return sliver_list
def format_options(self, available=None, compress=None, end_time=None, best_effort=None, users=[]): options = {"geni_rspec_version": {"type": "geni", "version": 3}} if available: options["geni_available"] = available if compress: options["geni_compress"] = compress if end_time: # Convert to rfc3339 prior to sending options["geni_end_time"] = dates.datetime_to_rfc3339(end_time) if best_effort: options["geni_best_effort"] = best_effort if users: options["geni_users"] = users return options
def renew(self, urns, client_cert, credentials, expiration_time, best_effort): """Documentation see [geniv3rpc] GENIv3DelegateBase.""" """ Renews the sliver(s) requested to a given date, passed by the user. The new expiration date for the sliver(s) must be less or equal to the expiration date of the user's credential. When best_effort is enabled, renewal will be attempted on every resource. @param urns list of URNs with the identifiers of the resources to be treated @param client_cert client certificate (X509) @param credentials client credential(s), provided by the ClearingHouse and generated after the certificates @param expiration_time new expiration date for the selected sliver(s). Must comply to rfr3339 format @param best_effort flag to describe the behaviour upon a failure * best_effort = True : as much operations as possible are performed upon an error condition * best_effort = False : the set of operations will be stopped if an error occurs @return ro_slivers structure containing information of slivers (URN, expiration date, etc) """ ro_slivers = [] logger.info("expiration_time=%s, best_effort=%s" % ( expiration_time, best_effort, )) route = db_sync_manager.get_slice_routing_keys(urns) logger.debug("Route=%s" % (route, )) etime_str = dates.datetime_to_rfc3339(expiration_time) for r, v in route.iteritems(): peer = db_sync_manager.get_configured_peer_by_routing_key(r) logger.debug("peer=%s" % (peer, )) if peer.get("type") in self._allowed_peers.values(): slivers = CommonUtils.manage_renew(peer, v, credentials, etime_str, best_effort) logger.debug("slivers=%s" % (slivers, )) ro_slivers.extend(slivers) ro_slivers = CommonUtils.convert_sliver_dates_to_datetime(ro_slivers) return ro_slivers
def format_options(self, available=None, compress=None, end_time=None, best_effort=None, users=[]): options = {"geni_rspec_version": {"type": "geni", "version": 3, }} if available: options["geni_available"] = available if compress: options["geni_compress"] = compress if end_time: # Convert to rfc3339 prior to sending options["geni_end_time"] = dates.datetime_to_rfc3339(end_time) if best_effort: options["geni_best_effort"] = best_effort if users: options["geni_users"] = users return options
def renew(self, urns, client_cert, credentials, expiration_time, best_effort): """Documentation see [geniv3rpc] GENIv3DelegateBase.""" """ Renews the sliver(s) requested to a given date, passed by the user. The new expiration date for the sliver(s) must be less or equal to the expiration date of the user's credential. When best_effort is enabled, renewal will be attempted on every resource. @param urns list of URNs with the identifiers of the resources to be treated @param client_cert client certificate (X509) @param credentials client credential(s), provided by the ClearingHouse and generated after the certificates @param expiration_time new expiration date for the selected sliver(s). Must comply to rfr3339 format @param best_effort flag to describe the behaviour upon a failure * best_effort = True : as much operations as possible are performed upon an error condition * best_effort = False : the set of operations will be stopped if an error occurs @return ro_slivers structure containing information of slivers (URN, expiration date, etc) """ ro_slivers = [] logger.info("expiration_time=%s, best_effort=%s" % ( expiration_time, best_effort,)) route = db_sync_manager.get_slice_routing_keys(urns) logger.debug("Route=%s" % (route,)) etime_str = dates.datetime_to_rfc3339(expiration_time) for r, v in route.iteritems(): peer = db_sync_manager.get_configured_peer_by_routing_key(r) logger.debug("peer=%s" % (peer,)) if peer.get("type") in self._allowed_peers.values(): slivers = CommonUtils.manage_renew( peer, v, credentials, etime_str, best_effort) logger.debug("slivers=%s" % (slivers,)) ro_slivers.extend(slivers) ro_slivers = CommonUtils.convert_sliver_dates_to_datetime(ro_slivers) return ro_slivers
def _convertExpiresDate(self, sliver_list): """ Converts datetime objects received from the delegate into strings. This is the expected returned type for the 'geni_expires' value. """ for slhash in sliver_list: if slhash["geni_expires"] is None: continue if not dates.is_date_or_rfc3339(slhash["geni_expires"]): raise ValueError("Given geni_expires in sliver_list hash " + "retrieved from delegate's method is not " + "a python datetime object.") # If date received is "datetime.datetime", convert to rfc3339 if dates.is_date(slhash["geni_expires"]): slhash["geni_expires"] =\ dates.datetime_to_rfc3339(slhash["geni_expires"]) return sliver_list