Beispiel #1
0
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
Beispiel #2
0
 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
Beispiel #3
0
 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)