Sync in o.middleware and replace our own
This syncs the above and removes our own code for the request-id. Bug: #1328840 Change-Id: I00ac021be48439a14681f9090ba3a13113a60429
This commit is contained in:
parent
abd5fc9eaa
commit
bd14583169
|
@ -22,11 +22,12 @@ from oslo import messaging
|
|||
from designate import exceptions
|
||||
from designate import notifications
|
||||
from designate import wsgi
|
||||
from designate.context import DesignateContext
|
||||
from designate import context
|
||||
from designate.openstack.common import jsonutils as json
|
||||
from designate.openstack.common import local
|
||||
from designate.openstack.common import log as logging
|
||||
from designate.openstack.common import strutils
|
||||
from designate.openstack.common.middleware import request_id
|
||||
from designate.openstack.common.gettextutils import _LI
|
||||
from designate.openstack.common.gettextutils import _LE
|
||||
from designate.openstack.common.gettextutils import _LC
|
||||
|
@ -84,16 +85,16 @@ def auth_pipeline_factory(loader, global_conf, **local_conf):
|
|||
|
||||
|
||||
class ContextMiddleware(wsgi.Middleware):
|
||||
def process_response(self, response):
|
||||
try:
|
||||
context = local.store.context
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
# Add the Request ID as a response header
|
||||
response.headers['X-DNS-Request-ID'] = context.request_id
|
||||
def make_context(self, request, *args, **kwargs):
|
||||
req_id = request.environ.get(request_id.ENV_REQUEST_ID)
|
||||
kwargs.setdefault('request_id', req_id)
|
||||
|
||||
return response
|
||||
ctxt = context.DesignateContext(*args, **kwargs)
|
||||
|
||||
local.store.context = ctxt
|
||||
request.environ['context'] = ctxt
|
||||
|
||||
return ctxt
|
||||
|
||||
|
||||
class KeystoneContextMiddleware(ContextMiddleware):
|
||||
|
@ -120,18 +121,14 @@ class KeystoneContextMiddleware(ContextMiddleware):
|
|||
|
||||
roles = headers.get('X-Roles').split(',')
|
||||
|
||||
context = DesignateContext(auth_token=headers.get('X-Auth-Token'),
|
||||
self.make_context(
|
||||
request,
|
||||
auth_token=headers.get('X-Auth-Token'),
|
||||
user=headers.get('X-User-ID'),
|
||||
tenant=headers.get('X-Tenant-ID'),
|
||||
roles=roles,
|
||||
service_catalog=catalog)
|
||||
|
||||
# Store the context where oslo-log exepcts to find it.
|
||||
local.store.context = context
|
||||
|
||||
# Attach the context to the request environment
|
||||
request.environ['context'] = context
|
||||
|
||||
|
||||
class NoAuthContextMiddleware(ContextMiddleware):
|
||||
def __init__(self, application):
|
||||
|
@ -142,19 +139,14 @@ class NoAuthContextMiddleware(ContextMiddleware):
|
|||
def process_request(self, request):
|
||||
headers = request.headers
|
||||
|
||||
context = DesignateContext(
|
||||
self.make_context(
|
||||
request,
|
||||
auth_token=headers.get('X-Auth-Token', None),
|
||||
user=headers.get('X-Auth-User-ID', 'noauth-user'),
|
||||
tenant=headers.get('X-Auth-Project-ID', 'noauth-project'),
|
||||
roles=headers.get('X-Roles', 'admin').split(',')
|
||||
)
|
||||
|
||||
# Store the context where oslo-log exepcts to find it.
|
||||
local.store.context = context
|
||||
|
||||
# Attach the context to the request environment
|
||||
request.environ['context'] = context
|
||||
|
||||
|
||||
class TestContextMiddleware(ContextMiddleware):
|
||||
def __init__(self, application, tenant_id=None, user_id=None):
|
||||
|
@ -172,17 +164,12 @@ class TestContextMiddleware(ContextMiddleware):
|
|||
all_tenants = strutils.bool_from_string(
|
||||
headers.get('X-Test-All-Tenants', 'False'))
|
||||
|
||||
context = DesignateContext(
|
||||
self.make_context(
|
||||
request,
|
||||
user=headers.get('X-Test-User-ID', self.default_user_id),
|
||||
tenant=headers.get('X-Test-Tenant-ID', self.default_tenant_id),
|
||||
all_tenants=all_tenants)
|
||||
|
||||
# Store the context where oslo-log exepcts to find it.
|
||||
local.store.context = context
|
||||
|
||||
# Attach the context to the request environment
|
||||
request.environ['context'] = context
|
||||
|
||||
|
||||
class FaultWrapperMiddleware(wsgi.Middleware):
|
||||
def __init__(self, application):
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
# Copyright 2011 OpenStack Foundation.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Base class(es) for WSGI Middleware."""
|
||||
|
||||
import webob.dec
|
||||
|
||||
|
||||
class Middleware(object):
|
||||
"""Base WSGI middleware wrapper.
|
||||
|
||||
These classes require an application to be initialized that will be called
|
||||
next. By default the middleware will simply call its wrapped app, or you
|
||||
can override __call__ to customize its behavior.
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def factory(cls, global_conf, **local_conf):
|
||||
"""Factory method for paste.deploy."""
|
||||
return cls
|
||||
|
||||
def __init__(self, application):
|
||||
self.application = application
|
||||
|
||||
def process_request(self, req):
|
||||
"""Called on each request.
|
||||
|
||||
If this returns None, the next application down the stack will be
|
||||
executed. If it returns a response then that response will be returned
|
||||
and execution will stop here.
|
||||
"""
|
||||
return None
|
||||
|
||||
def process_response(self, response):
|
||||
"""Do whatever you'd like to the response."""
|
||||
return response
|
||||
|
||||
@webob.dec.wsgify
|
||||
def __call__(self, req):
|
||||
response = self.process_request(req)
|
||||
if response:
|
||||
return response
|
||||
response = req.get_response(self.application)
|
||||
return self.process_response(response)
|
|
@ -0,0 +1,41 @@
|
|||
# Copyright (c) 2013 NEC Corporation
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
"""Middleware that ensures request ID.
|
||||
|
||||
It ensures to assign request ID for each API request and set it to
|
||||
request environment. The request ID is also added to API response.
|
||||
"""
|
||||
|
||||
import webob.dec
|
||||
|
||||
from designate.openstack.common import context
|
||||
from designate.openstack.common.middleware import base
|
||||
|
||||
|
||||
ENV_REQUEST_ID = 'openstack.request_id'
|
||||
HTTP_RESP_HEADER_REQUEST_ID = 'x-openstack-request-id'
|
||||
|
||||
|
||||
class RequestIdMiddleware(base.Middleware):
|
||||
|
||||
@webob.dec.wsgify
|
||||
def __call__(self, req):
|
||||
req_id = context.generate_request_id()
|
||||
req.environ[ENV_REQUEST_ID] = req_id
|
||||
response = req.get_response(self.application)
|
||||
if HTTP_RESP_HEADER_REQUEST_ID not in response.headers:
|
||||
response.headers.add(HTTP_RESP_HEADER_REQUEST_ID, req_id)
|
||||
return response
|
|
@ -9,20 +9,23 @@ paste.app_factory = designate.api.versions:factory
|
|||
|
||||
[composite:osapi_dns_v1]
|
||||
use = call:designate.api.middleware:auth_pipeline_factory
|
||||
noauth = noauthcontext maintenance faultwrapper osapi_dns_app_v1
|
||||
keystone = authtoken keystonecontext maintenance faultwrapper osapi_dns_app_v1
|
||||
noauth = request_id noauthcontext maintenance faultwrapper osapi_dns_app_v1
|
||||
keystone = request_id authtoken keystonecontext maintenance faultwrapper osapi_dns_app_v1
|
||||
|
||||
[app:osapi_dns_app_v1]
|
||||
paste.app_factory = designate.api.v1:factory
|
||||
|
||||
[composite:osapi_dns_v2]
|
||||
use = call:designate.api.middleware:auth_pipeline_factory
|
||||
noauth = noauthcontext maintenance faultwrapper osapi_dns_app_v2
|
||||
keystone = authtoken keystonecontext maintenance faultwrapper osapi_dns_app_v2
|
||||
noauth = request_id noauthcontext maintenance faultwrapper osapi_dns_app_v2
|
||||
keystone = request_id authtoken keystonecontext maintenance faultwrapper osapi_dns_app_v2
|
||||
|
||||
[app:osapi_dns_app_v2]
|
||||
paste.app_factory = designate.api.v2:factory
|
||||
|
||||
[filter:request_id]
|
||||
paste.filter_factory = designate.openstack.common.middleware.request_id:RequestIdMiddleware.factory
|
||||
|
||||
[filter:maintenance]
|
||||
paste.filter_factory = designate.api.middleware:MaintenanceMiddleware.factory
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ module=install_venv_common
|
|||
module=jsonutils
|
||||
module=local
|
||||
module=log
|
||||
module=middleware
|
||||
module=policy
|
||||
module=processutils
|
||||
module=service
|
||||
|
|
Loading…
Reference in New Issue