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.
|
||||
from __future__ import absolute_import
|
||||
|
||||
from oslo_log import log as logging
|
||||
|
||||
from placement.conf import api
|
||||
from placement.conf import base
|
||||
from placement.conf import database
|
||||
|
@ -21,7 +23,7 @@ from placement.conf import paths
|
|||
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
|
||||
# config they are using will maintain some independence.
|
||||
def register_opts(conf):
|
||||
|
@ -30,3 +32,4 @@ def register_opts(conf):
|
|||
database.register_opts(conf)
|
||||
paths.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.
|
||||
"""
|
||||
def __init__(self, token='admin', conf_fixture=None, db=True,
|
||||
use_intercept=True):
|
||||
use_intercept=True, register_opts=True):
|
||||
"""Create a Placement Fixture.
|
||||
|
||||
: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 use_intercept: If true, install a wsgi-intercept of the
|
||||
placement WSGI app.
|
||||
:param register_opts: If True, register configuration options.
|
||||
"""
|
||||
self.token = token
|
||||
self.db = db
|
||||
self.use_intercept = use_intercept
|
||||
self.conf_fixture = conf_fixture
|
||||
self.register_opts = register_opts
|
||||
|
||||
def setUp(self):
|
||||
super(PlacementFixture, self).setUp()
|
||||
if not self.conf_fixture:
|
||||
config = cfg.ConfigOpts()
|
||||
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:
|
||||
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):
|
||||
# register placement's config options
|
||||
conf.register_opts(config)
|
||||
logging.register_options(config)
|
||||
|
||||
if profiler:
|
||||
profiler.set_defaults(config)
|
||||
|
|
Loading…
Reference in New Issue