2016-11-21 1 views
1

Я пытаюсь получить все IP-адреса (прикрепленные к виртуальным машинам) из лазурной подписки.Получите IP-адрес от объекта VM, используя azure sdk в python

Я вытащил все виртуальные машины с помощью

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


for vm in compute_client.virtual_machines.list_all(): 
     print(vm.network_profile.network_interface) 

Но network_profile объекта, кажется, только указателя, я прочитал в документации и не могу понять, как связать каждый VM с подключенным к нему IP-адресу

Я наткнулся на это: Is there any python API which can get the IP address (internal or external) of Virtual machine in Azure

Но, кажется, что-то изменилось.

Я могу разрешить IP-адреса машины, только если мне известно имя объекта Public_IP-адреса (который не у всех из них имеет общедоступные IP-адреса).

мне нужно, чтобы быть в состоянии принять этот network_interface и разрешить IP на нем

ответ

0

Так кажется, что для того, чтобы получить IP-адреса, вам нужно разобрать URI, указанному в vm.network_profile.network_interface , Затем используйте подписку и имя nic, чтобы получить IP using network_client.network_interfaces.get().

Код я использовал ниже:

compute_client = ComputeManagementClient(credentials, subscription_id) 
network_client = NetworkManagementClient(credentials,subscription_id) 
     try: 
      get_private(compute_client, network_client) 
     except: 
      print("Auth failed on "+ subscription_id) 



def get_private(compute_client, network_client): 


    for vm in compute_client.virtual_machines.list_all(): 
     for interface in vm.network_profile.network_interfaces: 
      name=" ".join(interface.id.split('/')[-1:]) 
      sub="".join(interface.id.split('/')[4]) 

      try: 
       thing=network_client.network_interfaces.get(sub, name).ip_configurations 

       for x in thing: 
        print(x.private_ip_address) 

      except: 
       print("nope") 

В этом примере вы могли бы также сделать x.public_ip_address, чтобы получить государственные IP-адреса

1

Как ваш сказал, на самом деле, что-то изменилось, но не так много.

Первый, как показано ниже, NetworkManagementClientConfiguration был удален, подробности см. В link.

network_client = NetworkManagementClient(credentials,subscription_id) 

Во-вторых, в соответствии с source code параметр public_ip_address_name это имя подсети, перестает быть имя виртуальной машины.

# Resource Group 
GROUP_NAME = 'azure-sample-group-virtual-machines' 
# Network 
SUBNET_NAME = 'azure-sample-subnet' 
PUBLIC_IP_NAME = SUBNET_NAME 
public_ip_address = network_client.public_ip_addresses.get(GROUP_NAME, PUBLIC_IP_NAME) 

Затем, вы можете также private_ip_address & public_ip_address через IPConfiguration из PublicIPAddress

print(public_ip_address.ip_configuration.private_ip_address) 
print(public_ip_address.ip_configuration.public_ip_address) 
+0

Привет, чтобы завершить решение Peter Pan, единственный способ получить IP-адреса от А VM - получить идентификаторы в свойствах виртуальной машины, а затем проанализировать идентификаторы, чтобы получить другую часть внутри (группа ресурсов, подсеть и т. Д.), А затем вызвать сетевого клиента. Это может помочь: https://github.com/Azure/azure-sdk-for-python/issues/534 –

Смежные вопросы