Add NUMBER and LIST<NUMBER> parsing to cloudformation/parsing.py (#3118)
* Add NUMBER and LIST<NUMBER> parsing to cloudformation/parsing.py * Fix black formatting error in test_stack_parsing.py
This commit is contained in:
parent
81be4b37a1
commit
766f527d37
@ -560,6 +560,23 @@ class ResourceMap(collections_abc.Mapping):
|
||||
if value_type == "CommaDelimitedList" or value_type.startswith("List"):
|
||||
value = value.split(",")
|
||||
|
||||
def _parse_number_parameter(num_string):
|
||||
"""CloudFormation NUMBER types can be an int or float.
|
||||
Try int first and then fall back to float if that fails
|
||||
"""
|
||||
try:
|
||||
return int(num_string)
|
||||
except ValueError:
|
||||
return float(num_string)
|
||||
|
||||
if value_type == "List<Number>":
|
||||
# The if statement directly above already converted
|
||||
# to a list. Now we convert each element to a number
|
||||
value = [_parse_number_parameter(v) for v in value]
|
||||
|
||||
if value_type == "Number":
|
||||
value = _parse_number_parameter(value)
|
||||
|
||||
if parameter_slot.get("NoEcho"):
|
||||
self.no_echo_parameter_keys.append(key)
|
||||
|
||||
|
@ -67,6 +67,8 @@ get_availability_zones_output = {"Outputs": {"Output1": {"Value": {"Fn::GetAZs":
|
||||
parameters = {
|
||||
"Parameters": {
|
||||
"Param": {"Type": "String"},
|
||||
"NumberParam": {"Type": "Number"},
|
||||
"NumberListParam": {"Type": "List<Number>"},
|
||||
"NoEchoParam": {"Type": "String", "NoEcho": True},
|
||||
}
|
||||
}
|
||||
@ -303,12 +305,23 @@ def test_parse_stack_with_parameters():
|
||||
stack_id="test_id",
|
||||
name="test_stack",
|
||||
template=parameters_template_json,
|
||||
parameters={"Param": "visible value", "NoEchoParam": "hidden value"},
|
||||
parameters={
|
||||
"Param": "visible value",
|
||||
"NumberParam": "42",
|
||||
"NumberListParam": "42,3.14159",
|
||||
"NoEchoParam": "hidden value",
|
||||
},
|
||||
region_name="us-west-1",
|
||||
)
|
||||
|
||||
stack.resource_map.no_echo_parameter_keys.should.have("NoEchoParam")
|
||||
stack.resource_map.no_echo_parameter_keys.should_not.have("Param")
|
||||
stack.resource_map.no_echo_parameter_keys.should_not.have("NumberParam")
|
||||
stack.resource_map.no_echo_parameter_keys.should_not.have("NumberListParam")
|
||||
stack.resource_map.resolved_parameters["NumberParam"].should.equal(42)
|
||||
stack.resource_map.resolved_parameters["NumberListParam"].should.equal(
|
||||
[42, 3.14159]
|
||||
)
|
||||
|
||||
|
||||
def test_parse_equals_condition():
|
||||
|
Loading…
Reference in New Issue
Block a user