This issue has shown that, when we introduce new providers and propagate the configs to users, then remove the config ("asf" was removed and renamed to "default"), user configuration breaks
- #6358

One way of dealing with this is checking at startup time whether the configured providers are available, and if not, log a warning and fall back to the default provider.
"""
        Lists all apis where a given provider exists for.
        :param provider: Name of the provider
        :return: List of apis the given provider provides
        """
        apis = []
        for api, providers in self.api_provider_specs.items():
            if provider in providers:
                apis.append(api)
        return apis
    def stop_services(self, services: List[str] = None):
        """
        Stops services for this service manager, if they are currently active.
        Will not stop services not already started or in and error state.
        :param services: Service names to stop. If not provided, all services for this manager will be stopped.
        """
        for service_name in services:
            if self.get_state(service_name) in [ServiceState.STARTING, ServiceState.RUNNING]:
                service_container = self.get_service_container(service_name)
                service_container.stop()
    def stop_all_services(self) -> None:
        """
        Stops all services for this service manager, if they are currently active.
        Will not stop services not already started or in and error state.
        """
        services = self.list_available()
        self.stop_services(services)
SERVICE_PLUGINS: ServicePluginManager = ServicePluginManager()
def wait_for_infra_shutdown():