Varun
Varun

Reputation: 149

List subscriptions for a given Azure account

I'm trying to list the subscriptions in an Azure account using azure-python-sdk.

I have followed this link in documentation.

https://learn.microsoft.com/en-us/python/api/azure-mgmt-subscription/azure.mgmt.subscription.operations.subscriptionsoperations?view=azure-python#list-custom-headers-none--raw-false----operation-config-


from azure.mgmt.subscription import SubscriptionClient
from msrestazure.azure_active_directory import UserPassCredentials

credentials = UserPassCredentials(username='xxxx', password='xxxx')
sub_client = SubscriptionClient(credentials)
subs = [sub.as_dict() for sub in sub_client.subscriptions.list()]
print(subs)

It is supposed to return a list of subscriptions. However, I see only empty list returned every time I try the above code. Can anybody help?

Upvotes: 10

Views: 14286

Answers (4)

Pin90
Pin90

Reputation: 111

I have a similar problem, so I have used AzureCliCredential and it simply worked.

The code is this:

def subscription_list():
    credential = AzureCliCredential()
    subscription_client = SubscriptionClient(credential)
    sub_list = subscription_client.subscriptions.list()
    column_width = 40

    print("Subscription ID".ljust(column_width) + "Display name")
    print("-" * (column_width * 2))
    for group in list(sub_list):
        print(f'{group.subscription_id:<{column_width}}{group.display_name}')

Before trying this code, you have to log to Azure through the command line in your dev environment.

Upvotes: 3

Varun
Varun

Reputation: 149

I think I solved the issue using Azure CLI. Yet, I still wonder why it didn't work as supposed using azure-python-sdk.

Here is the code:

import subprocess
import json
subscriptions = json.loads(subprocess.check_output('az account list', shell=True).decode('utf-8'))
print(subscriptions)

Thank you for your responses.

Upvotes: 1

Laurent Mazuel
Laurent Mazuel

Reputation: 3546

If the list is empty and you get not exception, it's likely your credentials are correct (no exception), but your user doesn't have access to subscriptions (no permissions)

In the Azure portal, in the subscription panel you have a button "Access control (IAM)" to define what users are allowed to a given subscription. https://learn.microsoft.com/azure/role-based-access-control/role-assignments-portal

https://learn.microsoft.com/azure/role-based-access-control/rbac-and-directory-admin-roles

(I work at MS in the SDK team)

Upvotes: 2

Sajeetharan
Sajeetharan

Reputation: 222582

Try this code,

def list_subscriptions():
    try:
        sub_client = get_client_from_cli_profile(SubscriptionClient)
    except CLIError:
        logger.info("Not logged in, running az login")
        _run_az_cli_login()
        sub_client = get_client_from_cli_profile(SubscriptionClient)

    return [["Subscription_name", "Subscription ID"]] + [
        [sub.display_name, sub.subscription_id]
        for sub in sub_client.subscriptions.list()
    ]

You can find the handy tool from here

Upvotes: 3

Related Questions