diff --git a/tools/custom_guidelines.py b/tools/custom_guidelines.py index 39d39981aa..f6a3f83d55 100644 --- a/tools/custom_guidelines.py +++ b/tools/custom_guidelines.py @@ -21,11 +21,12 @@ import six from heat.common.i18n import _ from heat.common.i18n import _LW from heat.engine import constraints -from heat.engine import resources +from heat.engine import plugin_manager from heat.engine import support LOG = log.getLogger(__name__) + class HeatCustomGuidelines(object): _RULES = ['resource_descriptions', 'trailing_spaces'] @@ -33,20 +34,23 @@ class HeatCustomGuidelines(object): def __init__(self, exclude): self.error_count = 0 self.resources_classes = [] - global_env = resources.global_env() - for resource_type in global_env.get_types(): - cls = global_env.get_class(resource_type) - module = cls.__module__ - # Skip resources, which defined as template resource in environment - if module == 'heat.engine.resources.template_resource': - continue - # Skip discovered plugin resources - if module == 'heat.engine.plugins': - continue - path = module.replace('.', '/') - if any(path.startswith(excl_path) for excl_path in exclude): - continue - self.resources_classes.append(cls) + all_resources = _load_all_resources() + for resource_type in all_resources: + for rsrc_cls in all_resources[resource_type]: + module = rsrc_cls.__module__ + # Skip hidden resources check guidelines + if rsrc_cls.support_status.status == support.HIDDEN: + continue + # Skip resources, which defined as template resource in + # environment or cotrib resource + if module in ('heat.engine.resources.template_resource', + 'heat.engine.plugins'): + continue + # Skip manually excluded folders + path = module.replace('.', '/') + if any(path.startswith(excl_path) for excl_path in exclude): + continue + self.resources_classes.append(rsrc_cls) def run_check(self): print(_('Heat custom guidelines check started.')) @@ -271,6 +275,21 @@ class HeatCustomGuidelines(object): self.error_count += 1 +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) + + all_resources = {} + 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] + return all_resources + + def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('--exclude', '-e', metavar='',