Merge "Support multiple config file with mod_wsgi"

This commit is contained in:
Zuul 2022-12-12 15:16:14 +00:00 committed by Gerrit Code Review
commit e40ac0c798
4 changed files with 43 additions and 5 deletions

View File

@ -8,10 +8,16 @@ as Apache_ or nginx_).
The nova project provides two automatically generated entry points that
support this: ``nova-api-wsgi`` and ``nova-metadata-wsgi``. These read
``nova.conf`` and ``api-paste.ini`` and generate the required module-level
``application`` that most WSGI servers require. If nova is installed using pip,
these two scripts will be installed into whatever the expected ``bin``
directory is for the environment.
``nova.conf`` and ``api-paste.ini`` by default and generate the required
module-level ``application`` that most WSGI servers require.
If nova is installed using pip, these two scripts will be installed into
whatever the expected ``bin`` directory is for the environment.
The config files and config directory can be overridden via the
``OS_NOVA_CONFIG_FILES`` and ``OS_NOVA_CONFIG_DIR`` environment variables.
File paths listed in ``OS_NOVA_CONFIG_FILES`` are relative to
``OS_NOVA_CONFIG_DIR`` and delimited by ``;``.
The new scripts replace older experimental scripts that could be found in the
``nova/wsgi`` directory of the code repository. The new scripts are *not*

View File

@ -42,8 +42,11 @@ def _get_config_files(env=None):
if env is None:
env = os.environ
dirname = env.get('OS_NOVA_CONFIG_DIR', '/etc/nova').strip()
files = env.get('OS_NOVA_CONFIG_FILES', '').split(';')
if files == ['']:
files = CONFIG_FILES
return [os.path.join(dirname, config_file)
for config_file in CONFIG_FILES]
for config_file in files]
def _setup_service(host, name):

View File

@ -104,3 +104,18 @@ document_root = /tmp
'disable_compute_service_check_for_ffu', True,
group='workarounds')
wsgi_app._setup_service('myhost', 'api')
def test__get_config_files_empty_env(self):
env = {}
result = wsgi_app._get_config_files(env)
expected = ['/etc/nova/api-paste.ini', '/etc/nova/nova.conf']
self.assertEqual(result, expected)
def test__get_config_files_with_env(self):
env = {
"OS_NOVA_CONFIG_DIR": "/nova",
"OS_NOVA_CONFIG_FILES": "api.conf",
}
result = wsgi_app._get_config_files(env)
expected = ['/nova/api.conf']
self.assertEqual(result, expected)

View File

@ -0,0 +1,14 @@
---
fixes:
- |
apache mod_wsgi does not support passing commandline arguments to the wsgi
application that it hosts. As a result when the nova api or metadata api
where run under mod_wsgi it was not posible to use multiple config files
or non-default file names i.e. nova-api.conf
This has been adressed by the intoduction of a new, optional, envionment
varible ``OS_NOVA_CONFIG_FILES``. ``OS_NOVA_CONFIG_FILES`` is a ``;``
seperated list fo file path relitive to ``OS_NOVA_CONFIG_DIR``.
When unset the default ``api-paste.ini`` and ``nova.conf`` will be used
form ``/etc/nova``. This is supported for the nova api and nova metadata
wsgi applications.