Esempio n. 1
0
def _load_global_resources(env):
    manager = plugin_manager.PluginManager(__name__)

    # Sometimes resources should not be available for registration in Heat due
    # to unsatisfied dependencies. We look first for the function
    # 'available_resource_mapping', which should return the filtered resources.
    # If it is not found, we look for the legacy 'resource_mapping'.
    resource_mapping = plugin_manager.PluginMapping(
        ['available_resource', 'resource'])
    constraint_mapping = plugin_manager.PluginMapping('constraint')

    _register_resources(env, resource_mapping.load_all(manager))
    _register_constraints(env, constraint_mapping.load_all(manager))
    def test_load_all(self):
        mgr = plugin_manager.PluginManager('heat.tests')
        pm = plugin_manager.PluginMapping('current_test')

        all_items = pm.load_all(mgr)
        for item in current_test_mapping().iteritems():
            self.assertIn(item, all_items)
Esempio n. 3
0
def get_template_class(plugin_mgr, template_data):
    global _template_classes

    if _template_classes is None:
        tmpl_mapping = plugin_manager.PluginMapping('template')
        _template_classes = dict(tmpl_mapping.load_all(plugin_mgr))

    available_versions = _template_classes.keys()
    version = get_version(template_data, available_versions)
    version_type = version[0]
    try:
        return _template_classes[version]
    except KeyError:
        av_list = [v for k, v in available_versions if k == version_type]
        msg_data = {
            'version': ': '.join(version),
            'version_type': version_type,
            'available': ', '.join(v for v in av_list)
        }

        if len(av_list) > 1:
            explanation = _('"%(version)s". "%(version_type)s" '
                            'should be one of: %(available)s') % msg_data
        else:
            explanation = _('"%(version)s". "%(version_type)s" '
                            'should be: %(available)s') % msg_data
        raise exception.InvalidTemplateVersion(explanation=explanation)
Esempio n. 4
0
def _load_all_resources():
    manager = plugin_manager.PluginManager('heat.engine.resources')
    resource_mapping = plugin_manager.PluginMapping('resource')
    res_plugin_mappings = resource_mapping.load_all(manager)

    resources._register_resources(global_env, res_plugin_mappings)
    environment.read_global_environment(global_env)
Esempio n. 5
0
    def functions(self):
        '''Return a dict of template functions keyed by name.'''
        if self.version not in self._functionmaps:
            mappings = plugin_manager.PluginMapping('function', *self.version)
            funcs = dict(mappings.load_all(self._plugins))
            self._functionmaps[self.version] = funcs

        return self._functionmaps[self.version]
Esempio n. 6
0
def _load_all_resources():
    manager = plugin_manager.PluginManager('heat.engine.resources')
    resource_mapping = plugin_manager.PluginMapping('resource')
    res_plugin_mappings = resource_mapping.load_all(manager)

    for mapping in res_plugin_mappings:
        name, cls = mapping
        if all_resources.get(name) is not None:
            all_resources[name].append(cls)
        else:
            all_resources[name] = [cls]
Esempio n. 7
0
def _load_global_resources(env):
    _register_constraints(
        env, _get_mapping('heat.constraints'))  # 注册约束 约束的格式:name:plugin
    _register_stack_lifecycle_plugins(
        env, _get_mapping('heat.stack_lifecycle_plugins'))  # 生命周期
    _register_event_sinks(env, _get_mapping('heat.event_sinks'))  # 事件接收

    manager = plugin_manager.PluginManager(
        __name__)  # __name__ = __main__, 被调用时 = __init__
    # TODO: 遗留问题,此处为何传参是 __name__?
    # Sometimes resources should not be available for registration in Heat due
    # to unsatisfied dependencies. We look first for the function
    # 'available_resource_mapping', which should return the filtered resources.
    # If it is not found, we look for the legacy 'resource_mapping'.
    # 首先查找自己定义的可用的资源,没有就查找 resource_mapping
    resource_mapping = plugin_manager.PluginMapping(
        ['available_resource', 'resource'])  #
    constraint_mapping = plugin_manager.PluginMapping('constraint')

    _register_resources(env, resource_mapping.load_all(manager))

    _register_constraints(env, constraint_mapping.load_all(manager))
Esempio n. 8
0
def _load_all_resources():
    from oslo_log import log as logging
    logging.getLogger('heat.engine.environment').logger.setLevel(logging.ERROR)

    manager = plugin_manager.PluginManager('heat.engine.resources')
    resource_mapping = plugin_manager.PluginMapping('resource')
    res_plugin_mappings = resource_mapping.load_all(manager)

    for mapping in res_plugin_mappings:
        name, cls = mapping
        if all_resources.get(name) is not None:
            all_resources[name].append(cls)
        else:
            all_resources[name] = [cls]
Esempio n. 9
0
    def test_load_all(self):
        import heat.tests.test_plugin_manager
        mgr = plugin_manager.PluginManager('heat.tests')
        pm = plugin_manager.PluginMapping('current_test')

        # NOTE(chmou): We force the modules to be ourself so we can get
        # the current_test_mapping if not we will would be
        # skipped by plugin_loader.load_modules since we are skipping
        # the loading of the package with tests in there
        mgr.modules = [heat.tests.test_plugin_manager]

        all_items = pm.load_all(mgr)

        for item in current_test_mapping().iteritems():
            self.assertIn(item, all_items)
Esempio n. 10
0
def get_template_class(plugin_mgr, template_data):
    global _template_classes

    if _template_classes is None:
        tmpl_mapping = plugin_manager.PluginMapping('template')
        _template_classes = dict(tmpl_mapping.load_all(plugin_mgr))

    available_versions = _template_classes.keys()
    version = get_version(template_data, available_versions)
    try:
        return _template_classes[version]
    except KeyError:
        msg_data = {
            'version': ': '.join(version),
            'available': ', '.join(v for vk, v in available_versions)
        }
        explanation = _('Unknown version (%(version)s). '
                        'Should be one of: %(available)s') % msg_data
        raise exception.InvalidTemplateVersion(explanation=explanation)
Esempio n. 11
0
 def test_load_mapping_error(self):
     pm = plugin_manager.PluginMapping('error_test')
     self.assertRaises(MappingTestError, pm.load_from_module, self.module())
Esempio n. 12
0
 def test_load_mapping_non_existent(self):
     pm = plugin_manager.PluginMapping('nonexist')
     self.assertEqual({}, pm.load_from_module(self.module()))
Esempio n. 13
0
 def test_load_mapping_kwargs(self):
     pm = plugin_manager.PluginMapping('kwargs_test', baz='quux')
     self.assertEqual({'baz': 'quux'}, pm.load_from_module(self.module()))
Esempio n. 14
0
 def test_load_mapping_args(self):
     pm = plugin_manager.PluginMapping('args_test', 'baz', 'quux')
     expected = {0: 'baz', 1: 'quux'}
     self.assertEqual(expected, pm.load_from_module(self.module()))
Esempio n. 15
0
 def test_load_second_alternative_mapping(self):
     pm = plugin_manager.PluginMapping(['nonexist', 'current_test'])
     self.assertEqual(current_test_mapping(),
                      pm.load_from_module(self.module()))
Esempio n. 16
0
 def test_load_first_alternative_mapping(self):
     pm = plugin_manager.PluginMapping(['current_test', 'legacy_test'])
     self.assertEqual(current_test_mapping(),
                      pm.load_from_module(self.module()))
Esempio n. 17
0
 def test_load_single_mapping(self):
     pm = plugin_manager.PluginMapping('current_test')
     self.assertEqual(current_test_mapping(),
                      pm.load_from_module(self.module()))
Esempio n. 18
0
 def test_load_mapping_nonereturn(self):
     pm = plugin_manager.PluginMapping('none_return_test')
     self.assertEqual({}, pm.load_from_module(self.module()))
Esempio n. 19
0
 def test_load_mapping_exception(self):
     pm = plugin_manager.PluginMapping('error_test_exception')
     self.assertRaisesRegex(Exception, "exception", pm.load_from_module,
                            self.module())
Esempio n. 20
0
 def test_load_mapping_invalidtype(self):
     pm = plugin_manager.PluginMapping('invalid_type_test')
     self.assertEqual({}, pm.load_from_module(self.module()))