How do I get instance id/name from public ip address of VM in azure via python sdk

天涯浪子 提交于 2021-02-11 13:30:50

问题


    def get_instance_id_from_pip(self, pip):
    subscription_id="69ff3a41-a66a-4d31-8c7d-9a1ef44595c3"
    compute_client = ComputeManagementClient(self.credentials, subscription_id)
    network_client = NetworkManagementClient(self.credentials, subscription_id)

    print("Get all public IP")
    for public_ip in network_client.public_ip_addresses.list_all():
        if public_ip.ip_address == pip:
            print(public_ip)

            # Get id
            pip_id= public_ip.id.split('/')
            print("pip id : {}".format(pip_id))
            rg_from_pip = pip_id[4].lower()
            print("RG : {}".format(rg_from_pip))
            pip_name = pip_id[-1]
            print("pip name : {}".format(pip_name))

    for vm in compute_client.virtual_machines.list_all():
        vm_id = vm.id.split('/')
        #print("vm ref id: {}".format(vm_id))
        rg_from_vm = vm_id[4].lower()
        if rg_from_pip == rg_from_vm:
            ## this is the VM in the same rg as pip
            for ni_reference in vm.network_profile.network_interfaces:
                ni_reference = ni_reference.id.split('/')
                ni_name = ni_reference[8]
                print("ni reference: {}".format(ni_reference))

                net_interface = network_client.network_interfaces.get(rg_from_pip, ni_name)
                print("net interface ref {}".format(net_interface))
                public_ip_reference = net_interface.ip_configurations[0].public_ip_address
                if public_ip_reference:
                    public_ip_reference = public_ip_reference.id.split('/')
                    ip_group = public_ip_reference[4]
                    ip_name = public_ip_reference[8]
                    print("IP group {}, IP name {}".format(ip_group, ip_name))

                    if ip_name == pip_name:
                        print("Thank god. Finallly !!!!")
                        print("VM ID :-> {}".format(vm.id))
                        return vm.id

I have above code to get the VM instance ID from Public ip but its not working. What is real surprising is that for all instances, I am getting x.public_ip_address.ip_address as None value.

I had multiple readthedocs references for python SDK of Azure. but, some how all links not working. Good job Azure :)

Some of them: https://azure-sdk-for-python.readthedocs.io/en/v1.0.3/resourcemanagementcomputenetwork.html https://azure-storage.readthedocs.io/en/latest/ref/azure.storage.file.fileservice.html

Second edit: I got the answer to this and above code will return vm id given the public ip address. Though, you can see it is not absolutely optimized answer. Hence, better answers are welcome. Thanks!


回答1:


Docs have moved here: https://docs.microsoft.com/python/azure/

We made some redirection, but unfortunately it's not possible to go global redirection on RTD, so some pages are 404 :/

About your trouble, I would try to use the publicip operation group directly: https://docs.microsoft.com/en-us/python/api/azure.mgmt.network.v2017_11_01.operations.publicipaddressesoperations?view=azure-python

You get this one in the Network client, as client.public_ip_addresses



来源:https://stackoverflow.com/questions/50295700/how-do-i-get-instance-id-name-from-public-ip-address-of-vm-in-azure-via-python-s

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!