Add register_opts param to PlacementFixture
There are scenarios where it is useful to create a ConfigOpts and register_opts on it before ever calling the PlacementFixture. If that is done we don't want to re-register the opts within the fixture as this can lead to errors (especially when CLI opts are involved). The scenario that discovered this problem is in nova in a regression test [1] where a ConfigOpts is created and registered, the placement DatabaseFixture is started and then that same config is used in multiple instances of the PlacementFixture, each of which again register_opts(). Until commitb647919666
this wasn't a problem because the default opts in placement did not include any CLI options. Adding logging opts brought some in. This change adds a flag to the constructor for PlacementFixture, register_opts, defaulting to True, which lets the caller say no, I don't want do register. It also reverts the revert ofb647919666
to perform oslo_log.log.register_opts() from a central location. [1] test_bug_1679750.TestLocalDeleteAllocations.test_local_delete_removes_allocations_after_compute_restart Change-Id: I360a306b5d05ada75274733038b73ec2f2bdc4d4 Needed-By: I042e41ac8c41c0e5f0389904eb548e0e97d54c60 Related-Bug: #1821092
This commit is contained in:
parent
4b35ee2cae
commit
f7f5231677
|
@ -14,6 +14,8 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
from oslo_log import log as logging
|
||||||
|
|
||||||
from placement.conf import api
|
from placement.conf import api
|
||||||
from placement.conf import base
|
from placement.conf import base
|
||||||
from placement.conf import database
|
from placement.conf import database
|
||||||
|
@ -21,7 +23,7 @@ from placement.conf import paths
|
||||||
from placement.conf import placement
|
from placement.conf import placement
|
||||||
|
|
||||||
|
|
||||||
# To avoid global config, we require an existing ConfigOpts is passed
|
# To avoid global config, we require an existing ConfigOpts to be passed
|
||||||
# to register_opts. Then the caller can have some assurance that the
|
# to register_opts. Then the caller can have some assurance that the
|
||||||
# config they are using will maintain some independence.
|
# config they are using will maintain some independence.
|
||||||
def register_opts(conf):
|
def register_opts(conf):
|
||||||
|
@ -30,3 +32,4 @@ def register_opts(conf):
|
||||||
database.register_opts(conf)
|
database.register_opts(conf)
|
||||||
paths.register_opts(conf)
|
paths.register_opts(conf)
|
||||||
placement.register_opts(conf)
|
placement.register_opts(conf)
|
||||||
|
logging.register_options(conf)
|
||||||
|
|
|
@ -42,7 +42,7 @@ class PlacementFixture(fixtures.Fixture):
|
||||||
Used by other services, including nova, for functional tests.
|
Used by other services, including nova, for functional tests.
|
||||||
"""
|
"""
|
||||||
def __init__(self, token='admin', conf_fixture=None, db=True,
|
def __init__(self, token='admin', conf_fixture=None, db=True,
|
||||||
use_intercept=True):
|
use_intercept=True, register_opts=True):
|
||||||
"""Create a Placement Fixture.
|
"""Create a Placement Fixture.
|
||||||
|
|
||||||
:param token: The value to be used when passing an auth token
|
:param token: The value to be used when passing an auth token
|
||||||
|
@ -52,18 +52,21 @@ class PlacementFixture(fixtures.Fixture):
|
||||||
:param db: Whether to start the Database fixture.
|
:param db: Whether to start the Database fixture.
|
||||||
:param use_intercept: If true, install a wsgi-intercept of the
|
:param use_intercept: If true, install a wsgi-intercept of the
|
||||||
placement WSGI app.
|
placement WSGI app.
|
||||||
|
:param register_opts: If True, register configuration options.
|
||||||
"""
|
"""
|
||||||
self.token = token
|
self.token = token
|
||||||
self.db = db
|
self.db = db
|
||||||
self.use_intercept = use_intercept
|
self.use_intercept = use_intercept
|
||||||
self.conf_fixture = conf_fixture
|
self.conf_fixture = conf_fixture
|
||||||
|
self.register_opts = register_opts
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(PlacementFixture, self).setUp()
|
super(PlacementFixture, self).setUp()
|
||||||
if not self.conf_fixture:
|
if not self.conf_fixture:
|
||||||
config = cfg.ConfigOpts()
|
config = cfg.ConfigOpts()
|
||||||
self.conf_fixture = self.useFixture(config_fixture.Config(config))
|
self.conf_fixture = self.useFixture(config_fixture.Config(config))
|
||||||
conf.register_opts(self.conf_fixture.conf)
|
if self.register_opts:
|
||||||
|
conf.register_opts(self.conf_fixture.conf)
|
||||||
|
|
||||||
if self.db:
|
if self.db:
|
||||||
self.useFixture(db_fixture.Database(self.conf_fixture,
|
self.useFixture(db_fixture.Database(self.conf_fixture,
|
||||||
|
|
|
@ -71,7 +71,6 @@ def _get_config_files(env=None):
|
||||||
def _parse_args(config, argv, default_config_files):
|
def _parse_args(config, argv, default_config_files):
|
||||||
# register placement's config options
|
# register placement's config options
|
||||||
conf.register_opts(config)
|
conf.register_opts(config)
|
||||||
logging.register_options(config)
|
|
||||||
|
|
||||||
if profiler:
|
if profiler:
|
||||||
profiler.set_defaults(config)
|
profiler.set_defaults(config)
|
||||||
|
|
Loading…
Reference in New Issue