[openstack-dev] Change in openstack/keystone[master]: Implement domain specific Identity backends
Mark McLoughlin
markmc at redhat.com
Thu Aug 8 22:35:20 UTC 2013
Hi Henry,
On Tue, 2013-08-06 at 22:10 +0100, Henry Nash wrote:
> Hi Mark,
>
> Of particular interest are your views on the changes to keystone/common/config.py. The requirement is that we need to be able to instantiate multiple conf objects (built from different sets of config files). We tried two approaches to this:
>
> https://review.openstack.org/#/c/39530/11 which attempts to keep the current keystone config helper apps (register_bool() etc.) by passing on the conf instance, and
> https://review.openstack.org/#/c/39530/12 which removes these helper apps and just calls the methods on the conf itself (conf.register_opt())
>
> Both functionally work, but interested in your views on both approaches.
Definitely prefer more of the latter, since I've proposed it myself
previously :)
https://review.openstack.org/4547
There are some common patterns of cfg usage which keystone is unusual in
not adopting:
- declare options as a list, or multiple lists at the top of modules:
foo_opts = [
cfg.StrOpt('bar'),
cfg.ListOpt('foo'),
]
- declare options in the modules in which they're used, rather than
having a single module which declares all options for the project.
See this blueprint:
https://blueprints.launchpad.net/nova/+spec/scope-config-opts
for where I moved all of the option declarations out of the
nova.config module.
I recall this being a problem for keystone recently - I think it
may have been a keystone.middleware module imported keystone.config
which defined logging options which may have been defined
elsewhere. This kind of thing is easier to avoid if the config
options are scoped to the module which uses them.
- iff the code in this module needs to only work with cfg.CONF, then
register the options with cfg.CONF at the top of the module:
CONF = cfg.CONF
CONF.register_opts(foo_opts)
otherwise register the options before they're used:
def bar(conf, ..):
...
conf.register_opts(foo_opts)
if conf.foo:
...
def blaa(conf, ..):
...
conf.register_opts(foo_opts)
if conf.bar:
...
Hope that helps,
Mark.
More information about the OpenStack-dev
mailing list