如何通过python sdk从azure中的VM的公共IP地址获取实例ID/名称 [英] How do I get instance id/name from public ip address of VM in azure via python sdk

查看:133
本文介绍了如何通过python sdk从azure中的VM的公共IP地址获取实例ID/名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

    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

我有上面的代码从Public ip获取VM实例ID,但是它不起作用.真正令人惊讶的是,对于所有实例,我都将x.public_ip_address.ip_address设置为None值.

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.

我有多个针对Azure的python SDK的readthedocs参考.但是,所有链接都无法正常工作.做得好Azure:)

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

其中一些: https://azure-sdk-for-python.阅读thedocs.io/en/v1.0.3/resourcemanagementcomputenetwork.html https://azure-storage.readthedocs.io/en/latest/ref/azure.storage.file.fileservice.html

第二次修改:我得到了答案,上面的代码将在给定公共IP地址的情况下返回vm id.虽然,您可以看到它不是绝对优化的答案.因此,欢迎提供更好的答案.谢谢!

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!

推荐答案

文档已移至此处: https://docs.microsoft.com/python/azure/

我们进行了一些重定向,但是很遗憾,无法在RTD上进行全局重定向,因此某些页面是404:/

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

关于您的麻烦,我将尝试直接使用publicip操作组:>://docs.microsoft.com/zh-CN/python/api/azure.mgmt.network.v2017_11_01.operations.publicipaddressesoperations?view=azure-python

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

您可以在网络客户端中以client.public_ip_addresses的身份获得此密码

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

这篇关于如何通过python sdk从azure中的VM的公共IP地址获取实例ID/名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆