Search code examples
c#azure.net-coreazure-management-api

How to get list of Empty Resource Groups by using of Azure Mgmt SDK fluent


I am using https://www.nuget.org/packages/Microsoft.Azure.Management.Fluent for getting resources in Azure with programmatically(C# .NET-Core Web app) and tried to get resources information by providing service principals as below...

 string subscriptionId="XXX"; 
       AzureCredentials cred = new 
                 AzureCredentialsFactory().FromServicePrincipal(UIConstants.ClientID, 
                 UIConstants.Secret, UIConstants.Tenant,AzureEnvironment.AzureGlobalCloud);                      
                
        var azure = Azure.Configure()
                         .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic) 
                         .Authenticate(cred) 
                         .WithSubscription(subscriptionId);

How to get list of Empty Resource Groups by using of Azure Mgmt SDK fluent with dotnetcore,C#.net?menas Resource Groups that dont hv any azure resources

Pls, advice on above.

Thanks,


Solution

  • There is no built-in method, you need to write code to check if there are any resources in a resource group.

    Here is the sample code, and it can list all the empty resource groups at my side:

    using Microsoft.Azure.Management.Fluent;
    using Microsoft.Azure.Management.ResourceManager.Fluent;
    using Microsoft.Azure.Management.ResourceManager.Fluent.Authentication;
    using Microsoft.Azure.Management.ResourceManager.Fluent.Core;
    using System;
    
    namespace ConsoleApp5
    {
        class Program
        {
            static void Main(string[] args)
            {
                string subscriptionId = "xxx";
                string clientId = "xxx";
                string tenantId = "xxx";
                string clientSecret = "xxx";
    
                AzureCredentials cred = new AzureCredentialsFactory()
                    .FromServicePrincipal(
                    clientId,
                    clientSecret,
                    tenantId,
                    AzureEnvironment.AzureGlobalCloud
                    );
    
                var azure = Azure.Configure()
                                 .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                                 .Authenticate(cred)
                                 .WithSubscription(subscriptionId);
    
    
                RestClient restClient = RestClient.Configure()
                                      .WithEnvironment(AzureEnvironment.AzureGlobalCloud)
                                      .WithCredentials(cred)
                                      .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
                                      .Build();
    
                ResourceManagementClient client = new ResourceManagementClient(restClient);
                client.SubscriptionId = subscriptionId;          
    
                //list all resource groups
                var rgs = azure.ResourceGroups.List();
    
                foreach (var r in rgs)
                {              
                    
                    var resources = client.Resources.ListByResourceGroupAsync(r.Name).Result;
    
                    //initiate a resource number as 0
                    int number_of_resources = 0;
    
                    //check if there are any resources in the resource group
                    foreach (var resource in resources)
                    {
                        number_of_resources++;
                        break;                   
                    }
    
                    //if the resources number is 0 in the resource group, then print out the empty resource group name
                    if (number_of_resources == 0)
                    {
                        Console.WriteLine($"the resource group: {r.Name} is empty");
                    }
                }
    
                Console.WriteLine("**completed**");
                Console.ReadLine();
            }
        }
    }