""" Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 """ from cfnlint.rules import CloudFormationLintRule, RuleMatch class Configuration(CloudFormationLintRule): """Check if Conditions are configured correctly""" id = "E8001" shortdesc = "Conditions have appropriate properties" description = "Check if Conditions are properly configured" source_url = "https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/conditions-section-structure.html" tags = ["conditions"] condition_keys = [ "Condition", "Fn::And", "Fn::Equals", "Fn::Not", "Fn::Or", ] def match(self, cfn): matches = [] conditions = cfn.template.get("Conditions", {}) if conditions: for condname, condobj in conditions.items(): if not isinstance(condobj, dict): message = "Condition {0} has invalid property" matches.append( RuleMatch(["Conditions", condname], message.format(condname)) ) else: if len(condobj) != 1: message = "Condition {0} has too many intrinsic conditions" matches.append( RuleMatch( ["Conditions", condname], message.format(condname) ) ) else: for k, _ in condobj.items(): if k not in self.condition_keys: message = "Condition {0} has invalid property {1}" matches.append( RuleMatch( ["Conditions", condname] + [k], message.format(condname, k), ) ) return matches