(SubscriptionNotFound) Не удалось найти подписку "подписки"

Я перечисляю все доступные подписки. При вызове subscription.id возвращается:

/subscriptions/<subscription-id>

Теперь, если я попытаюсь передать это напрямую, скажем, в вычислительную библиотеку Azure, она не примет это как идентификатор.

compute_client = ComputeManagementClient(credential=credentials, subscription_id=subscription.id)

>> (SubscriptionNotFound) The subscription 'subscriptions' could not be found.

Это означает, что мне нужно вручную очистить идентификатор.

subscription.id.replace("/subscription/", "")

Что отвратительно. Есть ли встроенный метод для получения только идентификатора?


person Ari    schedule 07.10.2020    source источник


Ответы (2)


Это атрибут subscription_id: https://docs.microsoft.com/en-us/python/api/azure-mgmt-resource/azure.mgmt.resource.subscriptions.v2019_11_01.models.subscription?view=azure-python

from azure.mgmt.resource.subscriptions import SubscriptionClient
client = SubscriptionClient(credential)

for sub in client.subscriptions.list():
     print(sub.subscription_id)

(отказ от ответственности, я работаю в MS в группе Azure SDK)

person Laurent Mazuel    schedule 09.10.2020
comment
Привет, это то, что я сделал, однако результат для print(sub.subscription_id) дал бы мне /subscription/example-sub-id-123, и если бы я хотел передать это в ComputeManagementClient, это требует, я удаляю префикс /subscription/. Мне было просто любопытно, есть ли встроенный способ получить только необходимый раздел идентификатора? - person Ari; 11.10.2020
comment
subscription_id и id - это разные поля, в вашем вопросе вы использовали id, а не subscription_id - person Laurent Mazuel; 12.10.2020

К сожалению, нет встроенного метода для получения идентификатора подписки с помощью python.

Вы можете использовать команду Power Shell, например (Get-AzSubscription).SubscriptionId.

вызвав команду оболочки питания из Python:

Модуль subprocess - это модуль стандартной библиотеки Python. Он состоит из метода вызова, который можно использовать для создания новых процессов и получения от них возвращаемых значений и кодов ошибок /

Чтобы запустить команду PowerShell, вы просто передаете имя команды методу вызова в виде строки.

import subprocess 
subprocess.call("(Get-AzSubscription).SubscriptionId")
person Doris Lv    schedule 08.10.2020
comment
Глупый вопрос: требуется ли для этого установка Azure CLI перед запуском скрипта, который это делает? - person Ari; 08.10.2020
comment
На самом деле Azure Power Shell - это то, что нам нужно в этом случае, и в большинстве случаев он устанавливался автоматически, если нет, вы можете установить вручную, обратитесь к этому: docs.microsoft.com/en-us/powershell/scripting/install/ - person Doris Lv; 09.10.2020