[doc] How to debug the WSGI Neutron API
Closes-Bug: #2115878 Signed-off-by: Rodolfo Alonso Hernandez <ralonsoh@redhat.com> Change-Id: I6a801e7f85105598c2800edaa38175849d0da8d7
This commit is contained in:
committed by
Rodolfo Alonso
parent
596102d38d
commit
39220d9ebc
@@ -39,3 +39,4 @@ Testing
|
|||||||
template_model_sync_test
|
template_model_sync_test
|
||||||
coverage
|
coverage
|
||||||
db_transient_failure_injection
|
db_transient_failure_injection
|
||||||
|
neutron_wsgi_api_server
|
||||||
|
|||||||
116
doc/source/contributor/testing/neutron_wsgi_api_server.rst
Normal file
116
doc/source/contributor/testing/neutron_wsgi_api_server.rst
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
..
|
||||||
|
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.
|
||||||
|
|
||||||
|
|
||||||
|
Convention for heading levels in Neutron devref:
|
||||||
|
======= Heading 0 (reserved for the title in a document)
|
||||||
|
------- Heading 1
|
||||||
|
~~~~~~~ Heading 2
|
||||||
|
+++++++ Heading 3
|
||||||
|
''''''' Heading 4
|
||||||
|
(Avoid deeper levels because they do not render well.)
|
||||||
|
|
||||||
|
.. _neutron_wsgi_api_server:
|
||||||
|
|
||||||
|
Neutron WSGI API server
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Since OpenStack Epoxy (2025.1), the Neutron API server only runs using a uWSGI
|
||||||
|
server that loads the Neutron WSGI application. The configuration and modules
|
||||||
|
needed and how to execute the Neutron API using WSGI is described in
|
||||||
|
:doc:`/admin/config-wsgi`. The ``eventlet`` API server is no longer supported
|
||||||
|
and the code will be removed.
|
||||||
|
|
||||||
|
With the older implementation (``eventlet`` API server) it was easy to create
|
||||||
|
an entry script to start the Neutron API, using the same code as in the
|
||||||
|
generated script defined in the ``[entry_points]console_script`` section.
|
||||||
|
That script started a python executable; it was possible to add break points
|
||||||
|
(using ``pdb``) or create a profile for PyCharm, for example.
|
||||||
|
|
||||||
|
In the WSGI case this is a bit more complicated. It is not possible to attach
|
||||||
|
a Python debugger to the running process because this is not a Python
|
||||||
|
executable. The uWSGI server, when a request is received, uses the application
|
||||||
|
entry point to route the request, but the root process is not a Python
|
||||||
|
executable.
|
||||||
|
|
||||||
|
|
||||||
|
rpdb
|
||||||
|
----
|
||||||
|
|
||||||
|
An alternative to ``pdb`` is the use of
|
||||||
|
`rpdb <https://pypi.org/project/rpdb/>`. This library works the same as ``pdb``
|
||||||
|
but opening a TCP port that can be accessed using telnet, netcat, etc. For
|
||||||
|
example:
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
import rpdb
|
||||||
|
debugger = rpdb.Rpdb(addr='0.0.0.0', port=12345)
|
||||||
|
debugger.set_trace()
|
||||||
|
|
||||||
|
|
||||||
|
To access to the remote PDB console, it is needed to execute the following
|
||||||
|
command:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
$ telnet localhost 12345
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Executing the generated Neutron API script
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
The ``oslo-config-generator`` script can generate the script located in
|
||||||
|
``[entry_points]wsgi_scripts``, called ``neutron-api``; this script will
|
||||||
|
receive the same name. This script can be executed locally and will spawn
|
||||||
|
a single process Neutron API server, running one single WSGI thread, regardless
|
||||||
|
of the Neutron ``[DEFAULT]api_workers`` parameter.
|
||||||
|
|
||||||
|
It is not possible to pass any configuration file to this executable but the
|
||||||
|
Neutron API will use the default ones ``/etc/neutron/neutron.conf`` and
|
||||||
|
``/etc/neutron/plugins/ml2/ml2_conf.ini``. Any parameter needed by the Neutron
|
||||||
|
API must be defined in these two files.
|
||||||
|
|
||||||
|
Because this script will run as a Python process, it is possible to attach a
|
||||||
|
debugger or add a break point using ``pdb``. It is also possible to create a
|
||||||
|
PyCharm "configuration" (using its own term) to execute the Neutron API using
|
||||||
|
the PyCharm builtin debugger.
|
||||||
|
|
||||||
|
In order to run the Neutron API using this script, it is only needed to provide
|
||||||
|
the listening port:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
$ neutron-api --port 8000
|
||||||
|
|
||||||
|
|
||||||
|
Once running, it is needed to change the OpenStack endpoint for the networking
|
||||||
|
service:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
$ openstack endpoint list
|
||||||
|
+----------------------------------+-----------+--------------+----------------+---------+-----------+-------------------------------------------------+
|
||||||
|
| ID | Region | Service Name | Service Type | Enabled | Interface | URL |
|
||||||
|
+----------------------------------+-----------+--------------+----------------+---------+-----------+-------------------------------------------------+
|
||||||
|
| 3959198c9b3f457cbb03cf49cd278415 | RegionOne | neutron | network | True | public | http://192.168.10.100/networking |
|
||||||
|
| 5807512a0c344144a1bd4f3bda4d3316 | RegionOne | glance | image | True | public | http://192.168.10.100/image |
|
||||||
|
| 6954de6553c84cb19d2f3441411ca897 | RegionOne | nova_legacy | compute_legacy | True | public | http://192.168.10.100/compute/v2/$(project_id)s |
|
||||||
|
| 71fe40ea4e6e431cb800143b4349928c | RegionOne | keystone | identity | True | public | http://192.168.10.100/identity |
|
||||||
|
| 73b86abeaca14e7ba18a53b8357dddee | RegionOne | nova | compute | True | public | http://192.168.10.100/compute/v2.1 |
|
||||||
|
| 76f5c962173b419b994d86877070673e | RegionOne | placement | placement | True | public | http://192.168.10.100/placement |
|
||||||
|
| 841199dad0b54acbb1c781e0b881cbf3 | RegionOne | designate | dns | True | public | http://192.168.10.100/dns |
|
||||||
|
| f4b219c2287448e3add582204db7ac69 | RegionOne | cinder | block-storage | True | public | http://192.168.10.100/volume/v3 |
|
||||||
|
+----------------------------------+-----------+--------------+----------------+---------+-----------+-------------------------------------------------+
|
||||||
|
$ openstack endpoint set --url http://192.168.10.100:8000 3959198c9b3f457cbb03cf49cd278415
|
||||||
Reference in New Issue
Block a user