[goal] Propose migration from WSGI scripts to Python module paths
Change-Id: I509c42942b65f202270486a89a9071c7bf7e6595 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
parent
ada527da10
commit
3c2a55a737
78
goals/proposed/migrate-from-wsgi-scripts-to-module-paths.rst
Normal file
78
goals/proposed/migrate-from-wsgi-scripts-to-module-paths.rst
Normal file
@ -0,0 +1,78 @@
|
||||
=========================================
|
||||
Migrate from wsgi scripts to module paths
|
||||
=========================================
|
||||
|
||||
We have long supported automated generation of WSGI scripts, which are Python
|
||||
scripts that contain an ``application`` object as described in `PEP-333`__.
|
||||
This automated generation was facilitated by PBR through the use of
|
||||
``wsgi_scripts`` entrypoint declared in ``setup.cfg`` or ``setup.py``.
|
||||
|
||||
As a result of multiple changes in the Python packaging ecosystem, primarily
|
||||
driven by `PEP-517`__, the approach we have used to implement this
|
||||
functionality will eventually break. We are rapidly approaching the point where
|
||||
it will no longer be possible to continue to support without likely large
|
||||
investment in PBR.
|
||||
|
||||
This investment is hard to justify given the WSGI script approach is not
|
||||
necessary for uWSGI and is not supported by gunicorn. Both of these utilities
|
||||
instead support for specifying Python module paths. That is to say, instead of
|
||||
providing a filesystem path to a Python script, we can provide a Python module
|
||||
path to an ``application`` object. In more concrete terms, a uWSGI
|
||||
configuration that currently looks like so:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[uwsgi]
|
||||
wsgi-file = /bin/nova-api-wsgi
|
||||
|
||||
can also be configured as:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
[uwsgi]
|
||||
module = nova.wsgi.osapi_compute:application
|
||||
|
||||
All projects that expose a WSGI server and make use of PBR's ``wsgi_scripts``
|
||||
functionality should provide a new ``<service>.wsgi`` module. This module
|
||||
should contain one or more modules, each corresponding to an individual WSGI
|
||||
server exposed by the service. Each of these server modules should contain an
|
||||
``application`` object suitable for invocation by a WSGI reverse proxy server.
|
||||
|
||||
Services may choose to remove the ``wsgi_scripts`` entrypoint immediately upon
|
||||
migration or wait a cycle to remove it. However, these entrypoints will soon
|
||||
start to fail with newer versions of pip and setuptools thus they should not be
|
||||
retained indefinitely.
|
||||
|
||||
Champion
|
||||
========
|
||||
|
||||
Stephen Finucane (stephenfin)
|
||||
|
||||
Gerrit Topic
|
||||
============
|
||||
|
||||
To facilitate tracking, commits related to this goal should use the
|
||||
gerrit topic::
|
||||
|
||||
remove-wsgi_scripts
|
||||
|
||||
Completion Criteria
|
||||
===================
|
||||
|
||||
#. All official OpenStack service projects should provide one or more
|
||||
``<service>.wsgi.<server>`` modules, each containing an ``application``
|
||||
object.
|
||||
|
||||
Current State / Anticipated Impact
|
||||
==================================
|
||||
|
||||
Thus far, patches have been proposed against Nova and DevStack to demonstrate
|
||||
the impact of this change. As services start implementing their own
|
||||
``<service>.wsgi`` module, all deployment tools including DevStack will need to
|
||||
to switch from WSGI script-based configuration to Python module path-based
|
||||
configuration. From the initial work on the Nova and DevStack as well as
|
||||
discussions with relevant people working on deployment tooling, it is expected
|
||||
that the overall size of this effort will be minimal.
|
||||
|
||||
.. __: https://peps.python.org/pep-0333/
|
||||
.. __: https://peps.python.org/pep-0517/
|
Loading…
Reference in New Issue
Block a user