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"):
|
if value_type == "CommaDelimitedList" or value_type.startswith("List"):
|
||||||
value = value.split(",")
|
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"):
|
if parameter_slot.get("NoEcho"):
|
||||||
self.no_echo_parameter_keys.append(key)
|
self.no_echo_parameter_keys.append(key)
|
||||||
|
|
||||||
|
@ -67,6 +67,8 @@ get_availability_zones_output = {"Outputs": {"Output1": {"Value": {"Fn::GetAZs":
|
|||||||
parameters = {
|
parameters = {
|
||||||
"Parameters": {
|
"Parameters": {
|
||||||
"Param": {"Type": "String"},
|
"Param": {"Type": "String"},
|
||||||
|
"NumberParam": {"Type": "Number"},
|
||||||
|
"NumberListParam": {"Type": "List<Number>"},
|
||||||
"NoEchoParam": {"Type": "String", "NoEcho": True},
|
"NoEchoParam": {"Type": "String", "NoEcho": True},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -303,12 +305,23 @@ def test_parse_stack_with_parameters():
|
|||||||
stack_id="test_id",
|
stack_id="test_id",
|
||||||
name="test_stack",
|
name="test_stack",
|
||||||
template=parameters_template_json,
|
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",
|
region_name="us-west-1",
|
||||||
)
|
)
|
||||||
|
|
||||||
stack.resource_map.no_echo_parameter_keys.should.have("NoEchoParam")
|
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("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():
|
def test_parse_equals_condition():
|
||||||
|
Loading…
Reference in New Issue
Block a user