我正试图从azure订阅中获取所有IP(附加到VM)。
我已经使用
拉出了所有虚拟机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地址
但似乎有些事情发生了变化。
只有当我知道Public_IP地址对象的名称(并非所有地址对象都具有公共IP)时,我才能解析机器的IP。
我需要能够使用此network_interface并解析其上的IP
答案 0 :(得分:1)
正如你所说,确实有些事情发生了变化,但并不多。
首先,如下所示,NetworkManagementClientConfiguration
已被删除,请参阅link中的详细信息。
network_client = NetworkManagementClient(credentials,subscription_id)
其次,根据source code,参数public_ip_address_name
是子网的名称,不再是vm名称。
# 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
&来自IPConfiguration
PublicIPAddress
public_ip_address
print(public_ip_address.ip_configuration.private_ip_address)
print(public_ip_address.ip_configuration.public_ip_address)
答案 1 :(得分:0)
因此,为了获取IP,您需要解析vm.network_profile.network_interface
中给出的URI。然后使用订阅和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