Получите ресурс Azure по идентификатору с помощью Azure Python SDK

Я хочу получить/проверить ресурс Azure от ID

from azure.mgmt.resource import ResourceManagementClient
resource_client = ResourceManagementClient(credentials, subscription_id)
resource_client.resources.check_existence_by_id(
'/subscriptions/<any_subscr>/resourceGroups/random_group'
'/providers/Microsoft.Compute/virtualMachines/test_vm', 
api_version='2017-12-01')

терпит неудачу с:

ClientRequestError: Error occurred in request., RetryError: HTTPSConnectionPool(host='management.azure.com', port=443): Max retries exceeded with url: /subscriptions/<any_subscr>/resourceGroups/random_group/providers/Microsoft.Compute/virtualMachines/test_vm?api-version=2017-12-01 (Caused by ResponseError('too many 503 error responses',))

api_version было взято из другой ошибки. Если я попытаюсь запустить ту же команду с api_version=resource_client.api_version и получу:

CloudError: Azure Error: NoRegisteredProviderFound
Message: No registered resource provider found for location 'eastus2' and API version '2017-05-10' for type 'virtualMachines'. The supported api-versions are '2015-05-01-preview, 2015-06-15, 2016-03-30, 2016-04-30-preview, 2016-08-30, 2017-03-30, 2017-12-01'. The supported locations are 'eastus, eastus2, westus, centralus, northcentralus, southcentralus, northeurope, westeurope, eastasia, southeastasia, japaneast, japanwest, australiaeast, australiasoutheast, brazilsouth, southindia, centralindia, westindia, canadacentral, canadaeast, westus2, westcentralus, uksouth, ukwest, koreacentral, koreasouth'.

но .get_by_id() с тем же api_version работает нормально.

Что-то не так с check_existence_by_id?


person Leonkin    schedule 30.12.2017    source источник
comment
az resource show --id '/subscriptions/<any_subscr>/resourceGroups/random_group/providers/Microsoft.Compute/virtualMachines/test-vm' также работает как положено. без какой-либо api_version спецификации   -  person Leonkin    schedule 31.12.2017


Ответы (1)


check_existence_by_id — это тонкая оболочка RestAPI, которая более или менее просто обеспечивает простую аутентификацию. Версия API, которую вам нужно предоставить, действительно связана с типом ресурса, который вы хотите (если ваш случай Microsoft.Compute/virtualMachines).

Вы можете получить эту информацию с помощью интерфейса командной строки и az provider list или SDK с атрибутом providers вашего клиента ресурса.

Обратите внимание на ваше замечание о том, что CLI не нуждается в ApiVersion: если вы выполните команду в режиме --debug, вы увидите, что CLI действительно выполняет az provider list под капотом после анализа идентификатора ресурса, чтобы получить правильную ApiVersion для использования.

(я работаю в команде Azure SDK для Python)

person Laurent Mazuel    schedule 02.01.2018