""" Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 """ from cfnlint.rules import CloudFormationLintRule, RuleMatch class InterfaceConfiguration(CloudFormationLintRule): """Check if Metadata Interface Configuration are configured correctly""" id = "E4001" shortdesc = "Metadata Interface have appropriate properties" description = "Metadata Interface properties are properly configured" source_url = "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cloudformation-interface.html" tags = ["metadata"] valid_keys = ["ParameterGroups", "ParameterLabels"] def match(self, cfn): """Check CloudFormation Metadata Interface Configuration""" matches = [] strinterface = "AWS::CloudFormation::Interface" metadata_obj = cfn.template.get("Metadata", {}) if metadata_obj: interfaces = metadata_obj.get(strinterface, {}) if isinstance(interfaces, dict): for interface in interfaces: if interface not in self.valid_keys: message = "Metadata Interface has invalid property {0}" matches.append( RuleMatch( ["Metadata", strinterface, interface], message.format(interface), ) ) parameter_groups = interfaces.get("ParameterGroups", []) for index, value in enumerate(parameter_groups): for key in value: if key not in ["Label", "Parameters"]: message = "Metadata Interface has invalid property {0}" matches.append( RuleMatch( [ "Metadata", strinterface, "ParameterGroups", index, key, ], message.format(key), ) ) return matches