def available_modules(): """Set of service client modules available in Tempest and plugins Set of stable service clients from Tempest and service clients exposed by plugins. This set of available modules can be used for automatic configuration. :raise PluginRegistrationException: if a plugin exposes a service_version already defined by Tempest or another plugin. Examples:: from tempest import config params = {} for service_version in available_modules(): service = service_version.split('.')[0] params[service] = config.service_client_config(service) service_clients = ServiceClients(creds, identity_uri, client_parameters=params) """ extra_service_versions = set([]) _tempest_modules = set(tempest_modules()) plugin_services = ClientsRegistry().get_service_clients() name_conflicts = [] for plugin_name in plugin_services: plug_service_versions = set( [x['service_version'] for x in plugin_services[plugin_name]]) # If a plugin exposes a duplicate service_version raise an exception if plug_service_versions: if not plug_service_versions.isdisjoint(extra_service_versions): detailed_error = ( 'Plugin %s is trying to register a service %s already ' 'claimed by another one' % (plugin_name, extra_service_versions & plug_service_versions)) name_conflicts.append( exceptions.PluginRegistrationException( name=plugin_name, detailed_error=detailed_error)) # NOTE(andreaf) Once all tempest clients are stable, the following # if will have to be removed. if not plug_service_versions.isdisjoint( _tempest_internal_modules()): detailed_error = ( 'Plugin %s is trying to register a service %s already ' 'claimed by a Tempest one' % (plugin_name, _tempest_internal_modules() & plug_service_versions)) name_conflicts.append( exceptions.PluginRegistrationException( name=plugin_name, detailed_error=detailed_error)) extra_service_versions |= plug_service_versions if name_conflicts: LOG.error('Failed to list available modules due to name conflicts: %s', name_conflicts) raise testtools.MultipleExceptions(*name_conflicts) return _tempest_modules | extra_service_versions
def register_service_client(self, plugin_name, service_client_data): if plugin_name in self._service_clients: detailed_error = 'Clients for plugin %s already registered' raise exceptions.PluginRegistrationException( name=plugin_name, detailed_error=detailed_error % plugin_name) self._service_clients[plugin_name] = service_client_data
def register_service_client(self, plugin_name, service_client_data): if plugin_name in self._service_clients: detailed_error = 'Clients for plugin %s already registered' raise exceptions.PluginRegistrationException( name=plugin_name, detailed_error=detailed_error % plugin_name) self._service_clients[plugin_name] = service_client_data LOG.debug( "Successfully registered plugin %s in the service client " "registry with configuration: %s", plugin_name, service_client_data)