Throw ValidationError on null outputs section (#4221)

This commit is contained in:
Timothy Klopotoski 2021-08-26 01:01:01 -04:00 committed by GitHub
parent 9613795bc2
commit cbbeaff23e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 0 deletions

View File

@ -745,6 +745,13 @@ class OutputMap(collections_abc.Mapping):
def __init__(self, resources, template, stack_id): def __init__(self, resources, template, stack_id):
self._template = template self._template = template
self._stack_id = stack_id self._stack_id = stack_id
if "Outputs" in template and template["Outputs"] is None:
raise ValidationError(
stack_id, # not sure why we need to supply this when also supplying message
message="[/Outputs] 'null' values are not allowed in templates",
)
self._output_json_map = template.get("Outputs") self._output_json_map = template.get("Outputs")
# Create the default resources # Create the default resources

View File

@ -56,6 +56,8 @@ output_dict = {
} }
} }
null_output = {"Outputs": None}
bad_output = { bad_output = {
"Outputs": {"Output1": {"Value": {"Fn::GetAtt": ["Queue", "InvalidAttribute"]}}} "Outputs": {"Output1": {"Value": {"Fn::GetAtt": ["Queue", "InvalidAttribute"]}}}
} }
@ -146,6 +148,7 @@ import_value_template = {
} }
outputs_template = dict(list(dummy_template.items()) + list(output_dict.items())) outputs_template = dict(list(dummy_template.items()) + list(output_dict.items()))
null_outputs_template = dict(list(dummy_template.items()) + list(null_output.items()))
bad_outputs_template = dict(list(dummy_template.items()) + list(bad_output.items())) bad_outputs_template = dict(list(dummy_template.items()) + list(bad_output.items()))
get_attribute_outputs_template = dict( get_attribute_outputs_template = dict(
list(dummy_template.items()) + list(get_attribute_output.items()) list(dummy_template.items()) + list(get_attribute_output.items())
@ -162,6 +165,7 @@ ssm_parameter_template = dict(
dummy_template_json = json.dumps(dummy_template) dummy_template_json = json.dumps(dummy_template)
name_type_template_json = json.dumps(name_type_template) name_type_template_json = json.dumps(name_type_template)
output_type_template_json = json.dumps(outputs_template) output_type_template_json = json.dumps(outputs_template)
null_output_template_json = json.dumps(null_outputs_template)
bad_output_template_json = json.dumps(bad_outputs_template) bad_output_template_json = json.dumps(bad_outputs_template)
get_attribute_outputs_template_json = json.dumps(get_attribute_outputs_template) get_attribute_outputs_template_json = json.dumps(get_attribute_outputs_template)
get_availability_zones_template_json = json.dumps(get_availability_zones_template) get_availability_zones_template_json = json.dumps(get_availability_zones_template)
@ -316,6 +320,14 @@ def test_parse_stack_with_bad_get_attribute_outputs():
).should.throw(ValidationError) ).should.throw(ValidationError)
def test_parse_stack_with_null_outputs_section():
FakeStack.when.called_with(
"test_id", "test_stack", null_output_template_json, {}, "us-west-1"
).should.throw(
ValidationError, "[/Outputs] 'null' values are not allowed in templates"
)
def test_parse_stack_with_parameters(): def test_parse_stack_with_parameters():
stack = FakeStack( stack = FakeStack(
stack_id="test_id", stack_id="test_id",