16bfc82962
One of the goals for Pike [1] is to make each API service be able to run under web servers that support WSGI applications, such as Apache (+mod-wsgi) and Nginx (+uWSGI). Do following to address governance requirements: - Split existing manila/wsgi.py module into 3 modules: First (manila/wsgi/eventlet_server.py) is used by eventlet-based WSGI application approach. Second (manila/wsgi/wsgi.py) is used for WSGI web servers. And third (manila/wsgi/common.py) is common code for both. All three are made in cinder-like way to have alike-approach. - Reuse common code from "oslo_service/wsgi.py" module that allows us to remove code duplication. - Delete config opts that are defined by newly reused common code. - Register new entry point that will be manila wsgi app: "manila-wsgi". - Fix "manila/api/openstack/wsgi.py" module to be compatible with str/bytes handling approach used by Apache mod-wsgi plugin using different python versions (2/3). - Add web server config template "devstack/apache-manila.template" - Add devstack support where usage of this feature can be enabled or disabled using "MANILA_USE_MOD_WSGI" env var. It is set to "True" by default, because it is requirement for Pike release - to have it running in all CI jobs. Disable it only for one CI job that uses dummy driver and tests various manila core features that are not covered by other CI jobs. [1] https://governance.openstack.org/tc/goals/pike/deploy-api-in-wsgi.html Partially-Implements BluePrint wsgi-web-servers-support DocImpact Change-Id: Ibdef3c6810b65a5d6f3611e2d0079c635ee523ab
53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
# Copyright 2010 United States Government as represented by the
|
|
# Administrator of the National Aeronautics and Space Administration.
|
|
# Copyright 2010 OpenStack LLC.
|
|
# 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.
|
|
|
|
"""
|
|
Test WSGI basics and provide some helper functions for other WSGI tests.
|
|
"""
|
|
|
|
from oslo_service import wsgi
|
|
import routes
|
|
import webob
|
|
|
|
from manila import test
|
|
from manila.wsgi import common as common_wsgi
|
|
|
|
|
|
class Test(test.TestCase):
|
|
|
|
def test_router(self):
|
|
|
|
class Application(common_wsgi.Application):
|
|
"""Test application to call from router."""
|
|
|
|
def __call__(self, environ, start_response):
|
|
start_response("200", [])
|
|
return ['Router result']
|
|
|
|
class Router(wsgi.Router):
|
|
"""Test router."""
|
|
|
|
def __init__(self):
|
|
mapper = routes.Mapper()
|
|
mapper.connect("/test", controller=Application())
|
|
super(Router, self).__init__(mapper)
|
|
|
|
result = webob.Request.blank('/test').get_response(Router())
|
|
self.assertEqual("Router result", result.body)
|
|
result = webob.Request.blank('/bad').get_response(Router())
|
|
self.assertNotEqual(result.body, "Router result")
|