Split oslo_config and list all opts

The intent of providing the list_auth_token_opts function was to provide
the oslo_config sample config file generator a list of options to
include in its sample files. However, services like zaqar have come to
rely on the list_auth_token_opts to list all the options that may be
consumed by auth_token middleware so that they can register them against
a non-global oslo_config object.

By removing deprecated options from the list_auth_token_opts we remove
these options from the config objects that the services use, however by
keeping them we will forever have deprecated options in sample config
files.

To split these two functionalities create a new function that lists the
options available for sample config files and update the entrypoint to
reflect this. This function is currently private because it should only
need to be accessed via entrypoint. The old deprecated options are then
added back to the original list_auth_token_opts function.

Closes-Bug: #1533932
Change-Id: I2aae5483c9309ab75985298c8de5b6f24cbc0f0d
This commit is contained in:
Jamie Lennox 2016-01-14 13:14:32 +11:00
parent 787ca74171
commit f0965c955d
4 changed files with 122 additions and 8 deletions

View File

@ -0,0 +1,55 @@
# 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.
import copy
from keystoneauth1 import loading
import keystonemiddleware.auth_token
from keystonemiddleware.auth_token import _base
auth_token_opts = [
(_base.AUTHTOKEN_GROUP,
keystonemiddleware.auth_token._OPTS +
loading.get_auth_common_conf_options())
]
__all__ = (
'list_opts',
)
def list_opts():
"""Return a list of oslo_config options available in auth_token middleware.
The returned list includes the non-deprecated oslo_config options which may
be registered at runtime by the project. The purpose of this is to allow
tools like the Oslo sample config file generator to discover the options
exposed to users by this middleware.
Deprecated Options should not show up here so as to not be included in
sample configuration.
Each element of the list is a tuple. The first element is the name of the
group under which the list of elements in the second element will be
registered. A group name of None corresponds to the [DEFAULT] group in
config files.
This function is discoverable via the entry point
'keystonemiddleware.auth_token' under the 'oslo.config.opts' namespace.
:returns: a list of (group_name, opts) tuples
"""
auth_token_opts = (keystonemiddleware.auth_token._OPTS +
loading.get_auth_common_conf_options())
return [(_base.AUTHTOKEN_GROUP, copy.deepcopy(auth_token_opts))]

View File

@ -21,11 +21,13 @@ import copy
from keystoneauth1 import loading
import keystonemiddleware.auth_token
from keystonemiddleware.auth_token import _auth
from keystonemiddleware.auth_token import _base
auth_token_opts = [
(_base.AUTHTOKEN_GROUP,
keystonemiddleware.auth_token._OPTS +
_auth.OPTS +
loading.get_auth_common_conf_options())
]
@ -41,12 +43,13 @@ def list_auth_token_opts():
registered. A group name of None corresponds to the [DEFAULT] group in
config files.
This function is also discoverable via the entry point
'keystonemiddleware.auth_token' under the 'oslo.config.opts'
namespace.
NOTE: This function is no longer used for oslo_config sample generation.
Some services rely on this function for listing ALL (including deprecated)
options and registering them into their own config objects which we do not
want for sample config files.
The purpose of this is to allow tools like the Oslo sample config file
generator to discover the options exposed to users by this middleware.
See: :py:func:`keystonemiddleware.auth_token._opts.list_opts` for sample
config files.
:returns: a list of (group_name, opts) tuples
"""

View File

@ -15,18 +15,74 @@
import stevedore
from testtools import matchers
from keystonemiddleware import opts
from keystonemiddleware.auth_token import _opts as new_opts
from keystonemiddleware import opts as old_opts
from keystonemiddleware.tests.unit import utils
class OptsTestCase(utils.TestCase):
def test_original_list_all_options(self):
result_of_old_opts = old_opts.list_auth_token_opts()
self.assertThat(result_of_old_opts, matchers.HasLength(1))
for group in (g for (g, _l) in result_of_old_opts):
self.assertEqual('keystone_authtoken', group)
# This is the original list that includes deprecated options
expected_opt_names = [
'auth_admin_prefix',
'auth_host',
'auth_port',
'auth_protocol',
'auth_uri',
'identity_uri',
'auth_version',
'delay_auth_decision',
'http_connect_timeout',
'http_request_max_retries',
'admin_token',
'admin_user',
'admin_password',
'admin_tenant_name',
'cache',
'certfile',
'keyfile',
'cafile',
'region_name',
'insecure',
'signing_dir',
'memcached_servers',
'token_cache_time',
'revocation_cache_time',
'memcache_security_strategy',
'memcache_secret_key',
'memcache_use_advanced_pool',
'memcache_pool_dead_retry',
'memcache_pool_maxsize',
'memcache_pool_unused_timeout',
'memcache_pool_conn_get_timeout',
'memcache_pool_socket_timeout',
'include_service_catalog',
'enforce_token_bind',
'check_revocations_for_cached',
'hash_algorithms',
'auth_type',
'auth_section',
]
opt_names = [o.name for (g, l) in result_of_old_opts for o in l]
self.assertThat(opt_names, matchers.HasLength(len(expected_opt_names)))
for opt in opt_names:
self.assertIn(opt, expected_opt_names)
def _test_list_auth_token_opts(self, result):
self.assertThat(result, matchers.HasLength(1))
for group in (g for (g, _l) in result):
self.assertEqual('keystone_authtoken', group)
# This is the sample config generator list WITHOUT deprecations
expected_opt_names = [
'auth_uri',
'auth_version',
@ -65,7 +121,7 @@ class OptsTestCase(utils.TestCase):
self.assertIn(opt, expected_opt_names)
def test_list_auth_token_opts(self):
self._test_list_auth_token_opts(opts.list_auth_token_opts())
self._test_list_auth_token_opts(new_opts.list_opts())
def test_entry_point(self):
em = stevedore.ExtensionManager('oslo.config.opts',

View File

@ -28,7 +28,7 @@ setup-hooks =
[entry_points]
oslo.config.opts =
keystonemiddleware.auth_token = keystonemiddleware.opts:list_auth_token_opts
keystonemiddleware.auth_token = keystonemiddleware.auth_token._opts:list_opts
paste.filter_factory =
auth_token = keystonemiddleware.auth_token:filter_factory