Как получить общедоступный IP-адрес набора Azure Scale из Python API Azure SDK? - PullRequest
1 голос
/ 07 июля 2019

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

from azure.mgmt.compute import ComputeManagementClient
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.network import NetworkManagementClient      
credentials = ServicePrincipalCredentials(client_id=ID, secret=SECRET_KEY, tenant=TENANT_ID)
for net in NetworkManagementClient(credentials, SUBSCRIPTION_ID):
    print net

IP здесь нет. я также пробовал через объект набора масштаба, который вернулся из этого:

vmss =  ComputeManagementClient(credentials, SUBSCRIPTION_ID).virtual_machine_scale_set_vms.list(resource_group_name=resource_group,
                                                                           virtual_machine_scale_set_name=scale_set_name)

но я не вижу в этом свойства публичного IP.

1 Ответ

1 голос
/ 07 июля 2019

Я сам в этом не был уверен, поэтому посмотрел. Оказывается, в службе виртуальных сетей есть API, который перечисляет все общедоступные IP-адреса шкалы .

.

Этот код должен работать для вас, он перечислит все общедоступные IP-адреса, используемые внутри набора масштабов.

from azure.mgmt.compute import ComputeManagementClient
from azure.mgmt.network import NetworkManagementClient

# Your Azure Subscription ID
subscription_id = 'xxxx-xxxx-xxxx'

compute_client = ComputeManagementClient(credentials, subscription_id)
network_client = NetworkManagementClient(credentials, subscription_id)

rg = 'testscaleset-rg'
scaleset_name = 'testscaleset'

for i, vm in enumerate(compute_client.virtual_machine_scale_set_vms.list(resource_group_name=rg, virtual_machine_scale_set_name=scaleset_name)):
    nic_name = (vm.network_profile.network_interfaces[0].id).split("/")[-1]
    ip_config_name = vm.network_profile_configuration \
               .network_interface_configurations[0]\
               .ip_configurations[0]\
               .name
    ip_address_name = vm.network_profile_configuration \
           .network_interface_configurations[0]\
           .ip_configurations[0]\
           .public_ip_address_configuration\
           .name
    print(vm.name, (network_client.public_ip_addresses.get_virtual_machine_scale_set_public_ip_address( \
        resource_group_name=rg, \
        virtual_machine_scale_set_name=scaleset_name,\
        virtualmachine_index=i, \
        network_interface_name=nic_name, \
        ip_configuration_name=ip_config_name, \
        public_ip_address_name=ip_address_name)).ip_address)

Должен вернуться

testscaleset_0 40.68.133.234
...