in src/Analyzer.TemplateProcessor/ArmTemplateProcessor.cs [421:459]
private TemplateExpressionEvaluationHelper GetTemplateFunctionEvaluationHelper(Template template)
{
var helper = new TemplateExpressionEvaluationHelper();
var functionsLookup = template.GetFunctionDefinitions().ToInsensitiveDictionary(keySelector: function => function.Key, elementSelector: function => function.Function);
var parametersLookup = template.Parameters.CoalesceEnumerable().ToInsensitiveDictionary(
keySelector: parameter => parameter.Key,
elementSelector: parameter => parameter.Value.Value);
var variablesLookup = template.Variables.CoalesceEnumerable().ToInsensitiveDictionary(
keySelector: variable => variable.Key,
elementSelector: variable => variable.Value);
helper.Initialize(
metadata: template.Metadata,
functionsLookup: functionsLookup,
parametersLookup: parametersLookup,
variablesLookup: variablesLookup,
validationContext: null,
metricsRecorder: null);
// Set reference lookup
helper.OnGetTemplateReference = (TemplateReference templateReference) =>
{
foreach (var resource in template.Resources)
{
if (new[] { resource.Name.Value, resource.OriginalName }.Contains(templateReference.ResourceId))
{
return resource.Properties?.Value;
}
}
return ExpressionsEngine.EvaluateLanguageExpressionsRecursive(
root: templateReference.ResourceId,
evaluationContext: helper.EvaluationContext);
};
return helper;
}