I am trying to get all the IPs (attached to VMs) from an azure subscription.
I have pulled all the VMs using
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)
But the network_profile object seems to only be a pointer, I have read through the documentation and can not figure out how to link each vm to its attached IP addresses
I came across this: Is there any python API which can get the IP address (internal or external) of Virtual machine in Azure
But it seems that something has changed.
I am able to resolve the IPs of a machine only if I know the name of the Public_IP address object(Which not all of them have public IPs).
I need to be able to take this network_interface and resolve the IP on it
So It seems that in order to get the IPs, you need to parse the URI given in the
vm.network_profile.network_interface
. Then use the the subscription and the nic name to get the IPusing network_client.network_interfaces.get()
.The code I used is below:
In this example you could also do
x.public_ip_address
to get the public IPsAs your said, indeed, something has changed, but not much.
First as below,
NetworkManagementClientConfiguration
has been remove, see the details in the link.Second, according to the source code, the parameter
public_ip_address_name
is the name of the subnet, cease to be the vm name.Then, you can also the
private_ip_address
&public_ip_address
via theIPConfiguration
from thePublicIPAddress