private static DeploymentScope GetDeploymentScope()

in src/PSRule.Rules.Azure/Data/Template/TemplateVisitor.cs [1354:1398]


    private static DeploymentScope GetDeploymentScope(TemplateContext context, JObject resource, string type, out string managementGroup, out string subscriptionId, out string resourceGroupName)
    {
        if (!IsDeploymentResource(type))
        {
            if (context.Deployment.DeploymentScope == DeploymentScope.ManagementGroup)
            {
                managementGroup = context.ManagementGroup.Name;
                resourceGroupName = null;
                subscriptionId = null;
                return context.Deployment.DeploymentScope;
            }

            managementGroup = null;
            resourceGroupName = context.ResourceGroup.Name;
            subscriptionId = context.Subscription.SubscriptionId;
            return context.Deployment.DeploymentScope;
        }

        // Handle special case for cross-scope deployments which may have an alternative subscription or resource group set.
        subscriptionId = ResolveDeploymentScopeProperty(context, resource, PROPERTY_SUBSCRIPTION_ID, contextValue:
            context.Deployment.DeploymentScope == DeploymentScope.Subscription ||
            context.Deployment.DeploymentScope == DeploymentScope.ResourceGroup ? context.Subscription.SubscriptionId : null);

        resourceGroupName = ResolveDeploymentScopeProperty(context, resource, PROPERTY_RESOURCE_GROUP, contextValue:
            context.Deployment.DeploymentScope == DeploymentScope.ResourceGroup ? context.ResourceGroup.Name : null);

        managementGroup = ResolveDeploymentScopeProperty(context, resource, PROPERTY_MANAGEMENT_GROUP, contextValue:
            context.Deployment.DeploymentScope == DeploymentScope.ManagementGroup ? context.ManagementGroup.Name : null);

        // Update the deployment scope.
        if (context.Deployment.DeploymentScope == DeploymentScope.ResourceGroup || resourceGroupName != null)
        {
            return DeploymentScope.ResourceGroup;
        }
        if (context.Deployment.DeploymentScope == DeploymentScope.Subscription || subscriptionId != null)
        {
            return DeploymentScope.Subscription;
        }
        if (context.Deployment.DeploymentScope == DeploymentScope.ManagementGroup || managementGroup != null)
        {
            return DeploymentScope.ManagementGroup;
        }

        return context.Deployment.DeploymentScope;
    }