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)
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)
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)
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]
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]
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))
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]
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)
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)
def test_load_mapping_error(self): pm = plugin_manager.PluginMapping('error_test') self.assertRaises(MappingTestError, pm.load_from_module, self.module())
def test_load_mapping_non_existent(self): pm = plugin_manager.PluginMapping('nonexist') self.assertEqual({}, pm.load_from_module(self.module()))
def test_load_mapping_kwargs(self): pm = plugin_manager.PluginMapping('kwargs_test', baz='quux') self.assertEqual({'baz': 'quux'}, pm.load_from_module(self.module()))
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()))
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()))
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()))
def test_load_single_mapping(self): pm = plugin_manager.PluginMapping('current_test') self.assertEqual(current_test_mapping(), pm.load_from_module(self.module()))
def test_load_mapping_nonereturn(self): pm = plugin_manager.PluginMapping('none_return_test') self.assertEqual({}, pm.load_from_module(self.module()))
def test_load_mapping_exception(self): pm = plugin_manager.PluginMapping('error_test_exception') self.assertRaisesRegex(Exception, "exception", pm.load_from_module, self.module())
def test_load_mapping_invalidtype(self): pm = plugin_manager.PluginMapping('invalid_type_test') self.assertEqual({}, pm.load_from_module(self.module()))