in qs_cfn_lint_rules/stack/StackHelper.py [0:0]
def evaluate_string(template_url, depth=0):
"""Recursively find expressions in the URL and send them to be evaluated"""
# Recursion bail out
if depth > MAX_DEPTH:
raise Exception("Template URL contains more than {} levels or nesting".format(MAX_DEPTH))
template_urls = []
# Evaluate expressions
if "{" in template_url:
parts = template_url.split("{")
parts = parts[-1].split("}") # Last open bracket
# This function will handle Fn::Sub Fn::If etc.
replacements = evaluate_expression_controller(parts[0]) # First closed bracket after
for replacement in replacements:
template_url_temp = template_url
# print("evaluate_string: (before) {}".format(template_url))
# print("expression: {}".format(parts[0]))
# print("replacement: {}".format(replacement))
template_url_temp = template_url_temp.replace("{" + parts[0] + "}", replacement)
# print("evaluate_string: (after) {}".format(template_url_temp))
evaluated_strings = evaluate_string(template_url_temp, depth=(depth+1))
for evaluated_string in evaluated_strings:
template_urls.append(evaluated_string)
else:
template_urls.append(template_url)
return template_urls