Получите частные IP-адреса для виртуальных машин в масштабируемом наборе с помощью Python SDK (в масштабируемом наборе нет общедоступных IP-адресов).

Я пытаюсь получить список частных IP-адресов для всех виртуальных машин в масштабируемом наборе (ни одна из виртуальных машин намеренно не имеет общедоступных IP-адресов). Я нашел, как получить это от az cli следующим образом:

az vmss nic list -g ResourceGroup --vmss-name ScaleSetName --query [].{ip:ipConfigurations[0].privateIpAddress} -o tsv

Однако я не могу получить тот же результат с помощью Python SDK. Я использую следующий базовый код:

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

credentials = ServicePrincipalCredentials(client_id = CLIENT, secret = KEY, tenant = TENANT)

compute_client = ComputeManagementClient(credentials, SUBSCRIPTION)

vmss = compute_client.virtual_machine_scale_sets.get(RG, SC)
print(vmss.virtual_machine_profile.network_profile.network_interface_configurations[0].ip_configurations[0])

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


person VS_FF    schedule 06.01.2020    source источник


Ответы (1)


К сожалению, я боюсь, что вы не можете получить частный IP-адрес экземпляров масштабируемого набора виртуальных машин. Сетевые интерфейсы масштабируемых наборов виртуальных машин не являются ресурсами в Azure, и вы не можете их получить. В настоящее время пакет SDK для Python для Azure не поддерживает получение частных IP-адресов VMSS с помощью пакета SDK для Python.

Вы можете попробовать использовать REST API для достижения цели и получить REST API через отладку команды CLI следующим образом:

az vmss nic list -g ResourceGroup --vmss-name ScaleSetName --query [].{ip:ipConfigurations[0].privateIpAddress} -o tsv --debug

Он покажет прогресс и REST API:

введите здесь описание изображения

person Charles Xu    schedule 07.01.2020
comment
Да, как указано в вопросе, я знаю о команде az cli. Пока я справляюсь с вызовом этой команды как внешнего процесса из python. Но (1) это очень громоздко и (2) требуется, чтобы az cli сначала прошел аутентификацию на данной машине. - person VS_FF; 07.01.2020
comment
@VS_FF Я не имею в виду использование CLI, я имею в виду использование REST API в вашем коде Python. - person Charles Xu; 08.01.2020
comment
@VS_FF Какая сейчас ситуация? Вы решаете проблему с моим ответом? Или еще помощь? - person Charles Xu; 09.01.2020
comment
Я не могу использовать REST по вашему предложению по внутренним причинам. Как я уже упоминал, я продолжаю использовать команду AZ, создавая процесс изнутри Python. Этот подход работает лучше для моих целей, чем REST. Конечно, было бы лучше, если бы SDK действительно поддерживал такую ​​простую функциональность... - person VS_FF; 09.01.2020
comment
@VS_FF Боюсь, в настоящее время вы можете использовать CLI или REST API только в своем коде Python. Возможно, Azure SDK будет поддерживать его в будущем, как мы и ожидали. Кроме того, если вы не возражаете, пожалуйста, примите ответ, когда он будет полезен. - person Charles Xu; 09.01.2020
comment
@VS_FF Я думаю, что мой ответ полезен и объясняет ситуацию по вашему вопросу в настоящее время. Так что если у вас нет других идей, вы должны принять это. - person Charles Xu; 21.01.2020
comment
Ждал других правильных питонических идей, но явно ничего не приходит, так что давайте считать это принятым ответом. - person VS_FF; 21.01.2020