Мне нужна помощь в понимании исключения, которое я получаю из Azure SDK для Python.

Поэтому я пытаюсь использовать следующий код для получения списка общедоступных IP-адресов из Azure:

import azure.common.credentials as creds
from azure.mgmt.subscription import SubscriptionClient
from azure.mgmt.network.v2019_02_01 import NetworkManagementClient

credentials = creds.get_azure_cli_credentials(resource=None, with_tenant=False)[0]
sub_client = SubscriptionClient(credentials)
subs = [sub.as_dict() for sub in sub_client.subscriptions.list()]

for s in subs:
  sub_id = s['id'][15:]
  network_client = NetworkManagementClient(creds, sub_id)
  pub_ips = network_client.public_ip_addresses.list_all()
  print("done")
  for ip in pub_ips:
    print(ip.ip_address)

Вот вывод:

Traceback (most recent call last):
done
  File "/Users/mmyers/Workspace/cloud_helpers/Azure/azure_ip_collector/azure_public_ip.py", line 18, in <module>
    for ip in pub_ips:
  File "/usr/local/lib/python3.7/site-packages/msrest/paging.py", line 143, in __next__
    self.advance_page()
  File "/usr/local/lib/python3.7/site-packages/msrest/paging.py", line 129, in advance_page
    self._response = self._get_next(self.next_link)
  File "/usr/local/lib/python3.7/site-packages/azure/mgmt/network/v2019_02_01/operations/public_ip_addresses_operations.py", line 445, in internal_paging
    response = self._client.send(request, stream=False, **operation_config)
  File "/usr/local/lib/python3.7/site-packages/msrest/service_client.py", line 336, in send
    pipeline_response = self.config.pipeline.run(request, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/msrest/pipeline/__init__.py", line 197, in run
    return first_node.send(pipeline_request, **kwargs)  # type: ignore
  File "/usr/local/lib/python3.7/site-packages/msrest/pipeline/__init__.py", line 150, in send
    response = self.next.send(request, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/msrest/pipeline/requests.py", line 65, in send
    self._creds.signed_session(session)
AttributeError: module 'azure.common.credentials' has no attribute 'signed_session'

Как видите, «готово» печатается, поэтому исключение не произойдет, пока я не попробую перебрать список общедоступных IP-адресов. Я смущен этой ошибкой, потому что она звучит так, как будто с учетными данными что-то не так. Но как это может быть в случае, если запрос списка публичных IP-адресов не вызывает исключения? Если я уберу последние две строки, исключений нет.

0
supernova 19 Дек 2019 в 22:24

1 ответ

Эта строка:

network_client = NetworkManagementClient(creds, sub_id)

должно быть

network_client = NetworkManagementClient(credentials, sub_id)

Прямо сейчас вы передаете модуль, который вы импортировали в строке 1

1
Laurent Mazuel 24 Дек 2019 в 00:01