in src/Analyzer.TemplateProcessor/ArmTemplateProcessor.cs [161:204]
internal Template ProcessResourcesAndOutputs(Template template)
{
var evaluationHelper = GetTemplateFunctionEvaluationHelper(template);
SaveFlattenedResources(template.Resources);
foreach ((var resourceNameAndType, var resourceInfo) in flattenedResources)
{
ProcessTemplateResourceLanguageExpressions(resourceInfo.resource, evaluationHelper);
CopyResourceDependants(resourceInfo.resource);
if (!ResourceMappings.ContainsKey(resourceInfo.resource.Path))
{
AddResourceMapping(resourceInfo.expandedPath, resourceInfo.resource.Path);
}
resourceInfo.resource.Type.Value = resourceNameAndType.Split(" ")[1];
}
if ((template.Outputs?.Count ?? 0) > 0)
{
// Recreate evaluation helper with newly parsed properties
evaluationHelper = GetTemplateFunctionEvaluationHelper(template);
foreach (var outputKey in template.Outputs.Keys.ToList())
{
try
{
template.Outputs[outputKey].Value.Value = ExpressionsEngine.EvaluateLanguageExpressionsRecursive(
root: template.Outputs[outputKey].Value.Value,
evaluationContext: evaluationHelper.EvaluationContext);
}
catch (Exception)
{
logger?.LogWarning("The parsing of the template output named {outputName} failed", outputKey);
logger?.LogDebug("Output value: {outputValue}", template.Outputs[outputKey]?.Value?.Value?.ToString());
template.Outputs[outputKey].Value.Value = new JValue("NOT_PARSED");
}
}
}
return template;
}