コード例 #1
0
 def check_if_plugin_extensions_loaded(self):
     """Check if an extension supported by a plugin has been loaded."""
     plugin_extensions = self.get_supported_extension_aliases()
     missing_aliases = plugin_extensions - set(self.extensions)
     if missing_aliases:
         raise exceptions.ExtensionsNotFound(
             extensions=list(missing_aliases))
コード例 #2
0
ファイル: extensions.py プロジェクト: bopopescu/sriov
 def check_if_plugin_extensions_loaded(self):
     """Check if an extension supported by a plugin has been loaded."""
     plugin_extensions = set(itertools.chain.from_iterable([
         getattr(plugin, "supported_extension_aliases", [])
         for plugin in self.plugins.values()]))
     missing_aliases = plugin_extensions - set(self.extensions)
     if missing_aliases:
         raise exceptions.ExtensionsNotFound(
             extensions=list(missing_aliases))
コード例 #3
0
ファイル: extensions.py プロジェクト: ISCAS-VDI/neutron-base
    def extend_resources(self, version, attr_map):
        """Extend resources with additional resources or attributes.

        :param attr_map: the existing mapping from resource name to
        attrs definition.

        After this function, we will extend the attr_map if an extension
        wants to extend this map.
        """
        processed_exts = {}
        exts_to_process = self.extensions.copy()
        check_optionals = True
        # Iterate until there are unprocessed extensions or if no progress
        # is made in a whole iteration
        while exts_to_process:
            processed_ext_count = len(processed_exts)
            for ext_name, ext in list(exts_to_process.items()):
                # Process extension only if all required extensions
                # have been processed already
                required_exts_set = set(ext.get_required_extensions())
                if required_exts_set - set(processed_exts):
                    continue
                optional_exts_set = set(ext.get_optional_extensions())
                if check_optionals and optional_exts_set - set(processed_exts):
                    continue
                extended_attrs = ext.get_extended_resources(version)
                for res, resource_attrs in six.iteritems(extended_attrs):
                    attr_map.setdefault(res, {}).update(resource_attrs)
                processed_exts[ext_name] = ext
                del exts_to_process[ext_name]
            if len(processed_exts) == processed_ext_count:
                # if we hit here, it means there are unsatisfied
                # dependencies. try again without optionals since optionals
                # are only necessary to set order if they are present.
                if check_optionals:
                    check_optionals = False
                    continue
                # Exit loop as no progress was made
                break
        if exts_to_process:
            unloadable_extensions = set(exts_to_process.keys())
            LOG.error(_LE("Unable to process extensions (%s) because "
                          "the configured plugins do not satisfy "
                          "their requirements. Some features will not "
                          "work as expected."),
                      ', '.join(unloadable_extensions))
            # Fail gracefully for default extensions, just in case some out
            # of tree plugins are not entirely up to speed
            default_extensions = set(const.DEFAULT_SERVICE_PLUGINS.values())
            if not unloadable_extensions <= default_extensions:
                raise exceptions.ExtensionsNotFound(
                    extensions=list(unloadable_extensions))

        # Extending extensions' attributes map.
        for ext in processed_exts.values():
            ext.update_attributes_map(attr_map)
コード例 #4
0
ファイル: extensions.py プロジェクト: phonetest/neutron
    def _check_faulty_extensions(self, faulty_extensions):
        """Raise for non-default faulty extensions.

        Gracefully fail for defective default extensions, which will be
        removed from the list of loaded extensions.
        """
        default_extensions = set(const.DEFAULT_SERVICE_PLUGINS.values())
        if not faulty_extensions <= default_extensions:
            raise exceptions.ExtensionsNotFound(
                extensions=list(faulty_extensions))
        else:
            # Remove the faulty extensions so that they do not show during
            # ext-list
            for ext in faulty_extensions:
                try:
                    del self.extensions[ext]
                except KeyError:
                    pass
コード例 #5
0
ファイル: extensions.py プロジェクト: YujiAzama/neutron
    def extend_resources(self, version, attr_map):
        """Extend resources with additional resources or attributes.

        :param: attr_map, the existing mapping from resource name to
        attrs definition.

        After this function, we will extend the attr_map if an extension
        wants to extend this map.
        """
        processed_exts = {}
        exts_to_process = self.extensions.copy()
        # Iterate until there are unprocessed extensions or if no progress
        # is made in a whole iteration
        while exts_to_process:
            processed_ext_count = len(processed_exts)
            for ext_name, ext in list(exts_to_process.items()):
                # Process extension only if all required extensions
                # have been processed already
                required_exts_set = set(ext.get_required_extensions())
                if required_exts_set - set(processed_exts):
                    continue
                extended_attrs = ext.get_extended_resources(version)
                for res, resource_attrs in six.iteritems(extended_attrs):
                    attr_map.setdefault(res, {}).update(resource_attrs)
                processed_exts[ext_name] = ext
                del exts_to_process[ext_name]
            if len(processed_exts) == processed_ext_count:
                # Exit loop as no progress was made
                break
        if exts_to_process:
            LOG.error(
                _LE("It was impossible to process the following "
                    "extensions: %s because of missing requirements."),
                ','.join(exts_to_process.keys()))
            raise exceptions.ExtensionsNotFound(
                extensions=list(exts_to_process.keys()))

        # Extending extensions' attributes map.
        for ext in processed_exts.values():
            ext.update_attributes_map(attr_map)