in src/PSRule.Rules.Azure/Data/Template/TemplateVisitor.cs [405:455]
internal void EnterDeployment(string deploymentName, JObject template, bool isNested)
{
var templateHash = template.GetHashCode().ToString(Thread.CurrentThread.CurrentCulture);
TryObjectProperty(template, PROPERTY_METADATA, out var metadata);
TryStringProperty(template, PROPERTY_SCHEMA, out var schema);
var scope = GetDeploymentScope(schema, out var deploymentScope);
var id = string.Concat(scope == "/" ? string.Empty : scope, "/providers/", RESOURCE_TYPE_DEPLOYMENT, "/", deploymentName);
var location = ResourceGroup.Location;
var templateLink = new JObject
{
{ PROPERTY_ID, ResourceGroup.Id },
{ PROPERTY_URI, "https://deployment-uri" }
};
var properties = new JObject
{
{ PROPERTY_TEMPLATE, template.CloneTemplateJToken() },
{ PROPERTY_TEMPLATE_LINK, templateLink },
{ PROPERTY_PARAMETERS, _Parameters },
{ PROPERTY_MODE, "Incremental" },
{ PROPERTY_PROVISIONING_STATE, "Accepted" },
{ PROPERTY_TEMPLATE_HASH, templateHash },
{ PROPERTY_OUTPUTS, new JObject() }
};
var deployment = new JObject
{
{ PROPERTY_RESOURCENAME, isNested ? deploymentName : ParameterFile ?? TemplateFile },
{ PROPERTY_NAME, deploymentName },
{ PROPERTY_PROPERTIES, properties },
{ PROPERTY_LOCATION, location },
{ PROPERTY_TYPE, RESOURCE_TYPE_DEPLOYMENT },
{ PROPERTY_METADATA, metadata },
{ PROPERTY_ID, id },
{ PROPERTY_SCOPE, scope },
// Add a property to allow rules to detect root deployment. Related to: https://github.com/Azure/PSRule.Rules.Azure/issues/2109
{ PROPERTY_ROOT_DEPLOYMENT, !isNested }
};
var path = template.GetResourcePath(parentLevel: 2);
deployment.SetTargetInfo(TemplateFile, ParameterFile, path);
var deploymentValue = new DeploymentValue(id, deploymentName, null, scope, deploymentScope, deployment, null);
AddResource(deploymentValue);
_CurrentDeployment = deploymentValue;
_Deployment.Push(deploymentValue);
if (!isNested)
RootDeployment = _CurrentDeployment;
}