Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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