Есть ли способ проверить, какие вызовы API выполняет Azure CLI? - PullRequest
2 голосов
/ 04 августа 2020

Я использую Python SDK для Azure, но вижу, что в документации не хватает надлежащей информации и примеров. Я знаю, что Azure CLI построен поверх Python SDK для Azure, поэтому мне было интересно, есть ли способ узнать, какая функция Python вызывает, например: "az vm show".

Таким образом, я мог бы легко создать команду с помощью Azure CLI и преобразовать ее в Python код.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 августа 2020

Вы можете увидеть базовый API, выданный процессом Python.

Для этого вы можете использовать скрипач или любое клиентское приложение, которое может захватывать трафик c.

Для Fiddler вы можете загрузить и установить с здесь

Вам нужно будет включить Расшифровывать HTTPS-трафик c, поскольку весь трафик c в Azure через CLI осуществляется через HTTP. Обратитесь к this для получения дополнительной информации

Fiddler при запуске теперь будет действовать как прокси и будет захватывать весь сетевой трафик c.

Однако вы будете НЕ иметь возможность запускать Azure CLI напрямую с установленным скриптом на (прокси). Вам нужно будет добавить сертификат Fiddler к сертификату CLI.

Сертификат Fiddler можно найти по адресу http://localhost: 8888. Вам нужно будет экспортировать сертификат и преобразовать его в формат PEM. Экспортированный формат имеет формат .CRT

Вы можете сделать это локально, как указано здесь , или использовать онлайн-инструмент для этого примера: https://www.sslshopper.com/ssl-converter.html

Получив сертификат PEM, добавьте его содержимое в файл сертификата, который использует интерфейс командной строки:

C: \ Program Files (x86) \ Microsoft SDKs \ Azure \ CLI2 \ Lib \ site-packages \ certifi \ cacert.pem

<Original cacert.pem>

-----BEGIN CERTIFICATE-----
<Your proxy's certificate here>
-----END CERTIFICATE-----

Теперь вы сможете перехватывать трафик c, выданный процессом python.

enter image description here

More information on this is documented здесь

0 голосов
/ 04 августа 2020

Это мой способ обхода:

from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.compute import ComputeManagementClient

Subscription_Id = "xxxxxxx"
Tenant_Id = "xxxxxxx"
Client_Id = "xxxxxxx"
Secret = "xxxxxxx"

credential = ServicePrincipalCredentials(
        client_id=Client_Id,
        secret=Secret,
        tenant=Tenant_Id
        )

client = ComputeManagementClient(credential, Subscription_Id)
vmDetails = client.virtual_machines.get(resource_group_name='xxxxxxx', vm_name='xxxxxxx')
print(vmDetails)
...