""" Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. SPDX-License-Identifier: MIT-0 """ from cfnlint.rules import CloudFormationLintRule, RuleMatch class AvailabilityZone(CloudFormationLintRule): """Check Availibility Zone parameter checks""" id = "W3010" shortdesc = "Availability Zone Parameters should not be hardcoded" description = "Check if an Availability Zone property is hardcoded." source_url = "https://github.com/aws-cloudformation/cfn-python-lint" tags = ["parameters", "availabilityzone"] def __init__(self): """Init""" super().__init__() resource_type_specs = [ "AWS::AutoScaling::AutoScalingGroup", "AWS::DAX::Cluster", "AWS::DMS::ReplicationInstance", "AWS::EC2::Host", "AWS::EC2::Instance", "AWS::EC2::Subnet", "AWS::EC2::Volume", "AWS::ElasticLoadBalancing::LoadBalancer", "AWS::OpsWorks::Instance", "AWS::RDS::DBCluster", "AWS::RDS::DBInstance", ] property_type_specs = [ # Singular "AWS::EC2::LaunchTemplate.Placement", "AWS::EC2::SpotFleet.LaunchTemplateOverrides", "AWS::EC2::SpotFleet.SpotPlacement", "AWS::EMR::Cluster.PlacementType", "AWS::ElasticLoadBalancingV2::TargetGroup.TargetDescription", "AWS::Glue::Connection.PhysicalConnectionRequirements", ] for resource_type_spec in resource_type_specs: self.resource_property_types.append(resource_type_spec) for property_type_spec in property_type_specs: self.resource_sub_property_types.append(property_type_spec) # pylint: disable=W0613 def check_az_value(self, value, path): matches = [] # value of `all` is a valide exception in AWS::ElasticLoadBalancingV2::TargetGroup if value not in ["all"]: if path[-1] != ["Fn::GetAZs"]: message = "Don't hardcode {0} for AvailabilityZones" matches.append(RuleMatch(path, message.format(value))) return matches def check(self, properties, resource_type, path, cfn): """Check itself""" matches = [] matches.extend( cfn.check_value( properties, "AvailabilityZone", path, check_value=self.check_az_value, check_ref=None, check_find_in_map=None, check_split=None, check_join=None, ) ) matches.extend( cfn.check_value( properties, "AvailabilityZones", path, check_value=self.check_az_value, check_ref=None, check_find_in_map=None, check_split=None, check_join=None, ) ) return matches def match_resource_sub_properties(self, properties, property_type, path, cfn): """Match for sub properties""" matches = [] matches.extend(self.check(properties, property_type, path, cfn)) return matches def match_resource_properties(self, properties, resource_type, path, cfn): """Check CloudFormation Properties""" matches = [] matches.extend(self.check(properties, resource_type, path, cfn)) return matches
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
__pycache__ | Folder | 0755 |
|
|
AllowedPattern.py | File | 5.76 KB | 0644 |
|
AllowedValue.py | File | 4.8 KB | 0644 |
|
AtLeastOne.py | File | 4.11 KB | 0644 |
|
AvailabilityZone.py | File | 3.41 KB | 0644 |
|
BasedOnValue.py | File | 6.33 KB | 0644 |
|
Exclusive.py | File | 3.98 KB | 0644 |
|
ImageId.py | File | 2.37 KB | 0644 |
|
Inclusive.py | File | 3.7 KB | 0644 |
|
JsonSize.py | File | 6.08 KB | 0644 |
|
ListDuplicates.py | File | 4.39 KB | 0644 |
|
ListDuplicatesAllowed.py | File | 4.76 KB | 0644 |
|
ListSize.py | File | 4.88 KB | 0644 |
|
NumberSize.py | File | 4.88 KB | 0644 |
|
OnlyOne.py | File | 3.89 KB | 0644 |
|
Password.py | File | 3.63 KB | 0644 |
|
Properties.py | File | 27.49 KB | 0644 |
|
PropertiesTemplated.py | File | 2.44 KB | 0644 |
|
Required.py | File | 4.1 KB | 0644 |
|
RequiredBasedOnValue.py | File | 831 B | 0644 |
|
StringSize.py | File | 4.52 KB | 0644 |
|
UnwantedBasedOnValue.py | File | 837 B | 0644 |
|
ValuePrimitiveType.py | File | 11.6 KB | 0644 |
|
ValueRefGetAtt.py | File | 11.96 KB | 0644 |
|
__init__.py | File | 106 B | 0644 |
|