예제 #1
0
class Controller(controllers_base.Controller):
    """Version 1 API controller root."""

    bays = bay.BaysController()
    baymodels = baymodel.BayModelsController()
    clusters = cluster.ClustersController()
    clustertemplates = cluster_template.ClusterTemplatesController()
    quotas = quota.QuotaController()
    certificates = certificate.CertificateController()
    mservices = magnum_services.MagnumServiceController()
    stats = stats.StatsController()
    federations = federation.FederationsController()

    @expose.expose(V1)
    def get(self):
        # NOTE: The reason why convert() it's being called for every
        #       request is because we need to get the host url from
        #       the request object to make the links.
        return V1.convert()

    def _check_version(self, version, headers=None):
        if headers is None:
            headers = {}
        # ensure that major version in the URL matches the header
        if version.major != BASE_VERSION:
            raise http_error.HTTPNotAcceptableAPIVersion(
                _("Mutually exclusive versions requested. Version %(ver)s "
                  "requested but not supported by this service."
                  "The supported version range is: "
                  "[%(min)s, %(max)s].") % {
                      'ver': version,
                      'min': MIN_VER_STR,
                      'max': MAX_VER_STR
                  },
                headers=headers,
                max_version=str(MAX_VER),
                min_version=str(MIN_VER))
        # ensure the minor version is within the supported range
        if version < MIN_VER or version > MAX_VER:
            raise http_error.HTTPNotAcceptableAPIVersion(
                _("Version %(ver)s was requested but the minor version is not "
                  "supported by this service. The supported version range is: "
                  "[%(min)s, %(max)s].") % {
                      'ver': version,
                      'min': MIN_VER_STR,
                      'max': MAX_VER_STR
                  },
                headers=headers,
                max_version=str(MAX_VER),
                min_version=str(MIN_VER))

    @pecan.expose()
    def _route(self, args):
        version = ver.Version(pecan.request.headers, MIN_VER_STR, MAX_VER_STR)

        # Always set the basic version headers
        pecan.response.headers[ver.Version.min_string] = MIN_VER_STR
        pecan.response.headers[ver.Version.max_string] = MAX_VER_STR
        pecan.response.headers[ver.Version.string] = " ".join(
            [ver.Version.service_string,
             str(version)])
        pecan.response.headers["vary"] = ver.Version.string

        # assert that requested version is supported
        self._check_version(version, pecan.response.headers)
        pecan.request.version = version
        if pecan.request.body:
            msg = ("Processing request: url: %(url)s, %(method)s, "
                   "body: %(body)s" % {
                       'url': pecan.request.url,
                       'method': pecan.request.method,
                       'body': pecan.request.body
                   })
            LOG.debug(msg)

        return super(Controller, self)._route(args)
예제 #2
0
class Controller(rest.RestController):
    """Version 1 API controller root."""

    bays = bay.BaysController()
    baymodels = baymodel.BayModelsController()
    x509keypairs = x509keypair.X509KeyPairController()
    certificates = certificate.CertificateController()
    mservices = magnum_services.MagnumServiceController()

    @expose.expose(V1)
    def get(self):
        # NOTE: The reason why convert() it's being called for every
        #       request is because we need to get the host url from
        #       the request object to make the links.
        return V1.convert()

    def _check_version(self, version, headers=None):
        if headers is None:
            headers = {}
        # ensure that major version in the URL matches the header
        if version.major != BASE_VERSION:
            raise exc.HTTPNotAcceptable(
                _("Mutually exclusive versions requested. Version %(ver)s "
                  "requested but not supported by this service."
                  "The supported version range is: "
                  "[%(min)s, %(max)s].") % {
                      'ver': version,
                      'min': MIN_VER_STR,
                      'max': MAX_VER_STR
                  },
                headers=headers)
        # ensure the minor version is within the supported range
        if version < MIN_VER or version > MAX_VER:
            raise exc.HTTPNotAcceptable(
                _("Version %(ver)s was requested but the minor version is not "
                  "supported by this service. The supported version range is: "
                  "[%(min)s, %(max)s].") % {
                      'ver': version,
                      'min': MIN_VER_STR,
                      'max': MAX_VER_STR
                  },
                headers=headers)

    @pecan.expose()
    def _route(self, args):
        version = controllers_base.Version(pecan.request.headers, MIN_VER_STR,
                                           MAX_VER_STR)

        # Always set the min and max headers
        pecan.response.headers[
            controllers_base.Version.min_string] = MIN_VER_STR
        pecan.response.headers[
            controllers_base.Version.max_string] = MAX_VER_STR

        # assert that requested version is supported
        self._check_version(version, pecan.response.headers)
        pecan.response.headers[controllers_base.Version.string] = str(version)
        pecan.request.version = version
        if pecan.request.body:
            msg = ("Processing request: url: %(url)s, %(method)s, "
                   "body: %(body)s" % {
                       'url': pecan.request.url,
                       'method': pecan.request.method,
                       'body': pecan.request.body
                   })
            LOG.debug(msg)

        return super(Controller, self)._route(args)