From d24633a4688b951f2b4d29b3248019588b3e198a Mon Sep 17 00:00:00 2001 From: armando-migliaccio Date: Fri, 18 Sep 2015 13:13:59 -0700 Subject: [PATCH] Relax service module check on service providers service_provider is a 'special' configuration. It is a MultiStr option that used to be in neutron.conf, but moved into its own *-aas config files after the service split. We allow for the definition to be available 'anywhere': either in neutron.conf or in the *-aas service's config file. The list of 'service_provider' can include drivers from within the *-aas tree, or from elsewhere, and can apply to different service types. Due to the polymorphic nature of this variable it is very tricky to identify only the drivers that pertain a specific service module: the service module may as well implement more than one service type and may have support from drivers out of tree. For this reason it is best to relax this check and rely on query filters when the ServiceManager.get_service_providers() is invoked. Furthermore, without this fix there was a situation where the value returned by 'service_providers' may be differ depending on how the configuration is passed on the CLI, and this inconsistency may only cause headaches. Closes-bug: #1492069 Change-Id: I4db4ce0b287c984d86181227edf769531ecb7bb8 --- neutron/services/provider_configuration.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/neutron/services/provider_configuration.py b/neutron/services/provider_configuration.py index fb19552d0..9f8981be8 100644 --- a/neutron/services/provider_configuration.py +++ b/neutron/services/provider_configuration.py @@ -82,22 +82,18 @@ class NeutronModule(object): def service_providers(self): """Return the service providers for the extension module.""" providers = [] - # Attempt to read the config from cfg.CONF; this is possible - # when passing --config-dir. Since the multiStr config option - # gets merged, extract only the providers pertinent to this - # service module. + # Attempt to read the config from cfg.CONF first; when passing + # --config-dir, the option is merged from all the definitions + # made across all the imported config files try: - providers = [ - sp for sp in cfg.CONF.service_providers.service_provider - if self.module_name in sp - ] + providers = cfg.CONF.service_providers.service_provider except cfg.NoSuchOptError: pass - # Alternatively, if the option is not avaialable, load the - # config option using the module's built-in ini parser. - # this may be necessary, if modules are loaded on the fly - # (DevStack may be an example) + # Alternatively, if the option is not available, try to load + # it from the provider module's config file; this may be + # necessary, if modules are loaded on the fly (DevStack may + # be an example) if not providers: providers = self.ini().service_providers.service_provider -- 2.45.2