in src/PSRule.Rules.Azure/Pipeline/Export/ResourceExportVisitor.cs [159:213]
private async Task<bool> ExpandResource(IResourceExportContext context, JObject resource)
{
if (resource == null ||
!resource.TryStringProperty(PROPERTY_TYPE, out var resourceType) ||
string.IsNullOrWhiteSpace(resourceType) ||
!resource.TryGetProperty(PROPERTY_ID, out var resourceId) ||
!resource.TryGetProperty(PROPERTY_TENANT_ID, out var tenantId))
return false;
var resourceContext = new ResourceContext(context, tenantId);
// Set subscriptionId and resourceGroupName.
SetResourceIdentifiers(resource, resourceType, resourceId);
// Ignore expand of these.
if (string.Equals(resourceType, TYPE_VISUALSTUDIO_ACCOUNT, StringComparison.OrdinalIgnoreCase))
return true;
// Expand properties for the resource.
await GetProperties(resourceContext, resource, resourceType, resourceId);
// Expand sub-resources for the resource.
return await VisitResourceGroup(resourceContext, resource, resourceType, resourceId) ||
await VisitAPIManagement(resourceContext, resource, resourceType, resourceId) ||
await VisitAutomationAccount(resourceContext, resource, resourceType, resourceId) ||
await VisitCDNEndpoint(resourceContext, resource, resourceType, resourceId) ||
await VisitCDNProfile(resourceContext, resource, resourceType, resourceId) ||
await VisitFrontDoorEndpoint(resourceContext, resource, resourceType, resourceId) ||
await VisitContainerRegistry(resourceContext, resource, resourceType, resourceId) ||
await VisitAKSCluster(resourceContext, resource, resourceType, resourceId) ||
await VisitSqlServers(resourceContext, resource, resourceType, resourceId) ||
await VisitSqlDatabase(resourceContext, resource, resourceType, resourceId) ||
await VisitPostgreSqlServer(resourceContext, resource, resourceType, resourceId) ||
await VisitPostgreSqlFlexibleServer(resourceContext, resource, resourceType, resourceId) ||
await VisitMySqlServer(resourceContext, resource, resourceType, resourceId) ||
await VisitMySqlFlexibleServer(resourceContext, resource, resourceType, resourceId) ||
await VisitStorageAccount(resourceContext, resource, resourceType, resourceId) ||
await VisitWebApp(resourceContext, resource, resourceType, resourceId) ||
await VisitRecoveryServicesVault(resourceContext, resource, resourceType, resourceId) ||
await VisitVirtualMachine(resourceContext, resource, resourceType, resourceId) ||
await VisitKeyVault(resourceContext, resource, resourceType, resourceId) ||
await VisitFrontDoorClassic(resourceContext, resource, resourceType, resourceId) ||
await VisitSubscription(resourceContext, resource, resourceType, resourceId) ||
await VisitDataExplorerCluster(resourceContext, resource, resourceType, resourceId) ||
await VisitEventHubNamespace(resourceContext, resource, resourceType, resourceId) ||
await VisitServiceBusNamespace(resourceContext, resource, resourceType, resourceId) ||
await VisitEventGridTopic(resourceContext, resource, resourceType, resourceId) ||
await VisitEventGridDomain(resourceContext, resource, resourceType, resourceId) ||
await VisitEventGridNamespace(resourceContext, resource, resourceType, resourceId) ||
await VisitDevCenterProject(resourceContext, resource, resourceType, resourceId) ||
await VisitFirewallPolicy(resourceContext, resource, resourceType, resourceId) ||
await VisitVirtualHub(resourceContext, resource, resourceType, resourceId) ||
await VisitDNSZone(resourceContext, resource, resourceType, resourceId) ||
VisitNetworkConnection(resource, resourceType);
}