internal void EnterDeployment()

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;
        }