CloudFormation - verify shorthand Yaml-functions (#4556)
This commit is contained in:
parent
dfb380d887
commit
b355e0ada4
@ -378,12 +378,14 @@ def parse_condition(condition, resources_map, condition_map):
|
|||||||
condition_values = []
|
condition_values = []
|
||||||
for value in list(condition.values())[0]:
|
for value in list(condition.values())[0]:
|
||||||
# Check if we are referencing another Condition
|
# Check if we are referencing another Condition
|
||||||
if "Condition" in value:
|
if isinstance(value, dict) and "Condition" in value:
|
||||||
condition_values.append(condition_map[value["Condition"]])
|
condition_values.append(condition_map[value["Condition"]])
|
||||||
else:
|
else:
|
||||||
condition_values.append(clean_json(value, resources_map))
|
condition_values.append(clean_json(value, resources_map))
|
||||||
|
|
||||||
if condition_operator == "Fn::Equals":
|
if condition_operator == "Fn::Equals":
|
||||||
|
if condition_values[1] in [True, False]:
|
||||||
|
return str(condition_values[0]).lower() == str(condition_values[1]).lower()
|
||||||
return condition_values[0] == condition_values[1]
|
return condition_values[0] == condition_values[1]
|
||||||
elif condition_operator == "Fn::Not":
|
elif condition_operator == "Fn::Not":
|
||||||
return not parse_condition(condition_values[0], resources_map, condition_map)
|
return not parse_condition(condition_values[0], resources_map, condition_map)
|
||||||
|
@ -113,6 +113,26 @@ Resources:
|
|||||||
Value: Name tag for tests
|
Value: Name tag for tests
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
dummy_yaml_template_with_equals = """---
|
||||||
|
AWSTemplateFormatVersion: 2010-09-09
|
||||||
|
Description: Stack with yaml template
|
||||||
|
Conditions:
|
||||||
|
maybe:
|
||||||
|
Fn::Equals: [!Ref enabled, true]
|
||||||
|
Parameters:
|
||||||
|
enabled:
|
||||||
|
Type: String
|
||||||
|
AllowedValues:
|
||||||
|
- true
|
||||||
|
- false
|
||||||
|
Resources:
|
||||||
|
VPC1:
|
||||||
|
Type: AWS::EC2::VPC
|
||||||
|
Condition: maybe
|
||||||
|
Properties:
|
||||||
|
CidrBlock: 192.168.0.0/16
|
||||||
|
"""
|
||||||
|
|
||||||
dummy_template_yaml_with_ref = """---
|
dummy_template_yaml_with_ref = """---
|
||||||
AWSTemplateFormatVersion: 2010-09-09
|
AWSTemplateFormatVersion: 2010-09-09
|
||||||
Description: Stack1 with yaml template
|
Description: Stack1 with yaml template
|
||||||
@ -1851,6 +1871,42 @@ def test_cloudformation_params_conditions_and_resources_are_distinct():
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@mock_cloudformation
|
||||||
|
@mock_ec2
|
||||||
|
def test_cloudformation_conditions_yaml_equals():
|
||||||
|
cf = boto3.client("cloudformation", region_name="us-east-1")
|
||||||
|
cf.create_stack(
|
||||||
|
StackName="teststack2",
|
||||||
|
TemplateBody=dummy_yaml_template_with_equals,
|
||||||
|
Parameters=[{"ParameterKey": "enabled", "ParameterValue": "true"}],
|
||||||
|
)
|
||||||
|
resources = cf.list_stack_resources(StackName="teststack2")[
|
||||||
|
"StackResourceSummaries"
|
||||||
|
]
|
||||||
|
assert [
|
||||||
|
resource for resource in resources if resource["LogicalResourceId"] == "VPC1"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@mock_cloudformation
|
||||||
|
@mock_ec2
|
||||||
|
def test_cloudformation_conditions_yaml_equals_shortform():
|
||||||
|
_template = dummy_yaml_template_with_equals
|
||||||
|
_template = _template.replace("Fn::Equals:", "!Equals")
|
||||||
|
cf = boto3.client("cloudformation", region_name="us-east-1")
|
||||||
|
cf.create_stack(
|
||||||
|
StackName="teststack2",
|
||||||
|
TemplateBody=_template,
|
||||||
|
Parameters=[{"ParameterKey": "enabled", "ParameterValue": "true"}],
|
||||||
|
)
|
||||||
|
resources = cf.list_stack_resources(StackName="teststack2")[
|
||||||
|
"StackResourceSummaries"
|
||||||
|
]
|
||||||
|
assert [
|
||||||
|
resource for resource in resources if resource["LogicalResourceId"] == "VPC1"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
@mock_cloudformation
|
@mock_cloudformation
|
||||||
def test_stack_tags():
|
def test_stack_tags():
|
||||||
tags = [{"Key": "foo", "Value": "bar"}, {"Key": "baz", "Value": "bleh"}]
|
tags = [{"Key": "foo", "Value": "bar"}, {"Key": "baz", "Value": "bleh"}]
|
||||||
|
Loading…
Reference in New Issue
Block a user