0
    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

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

我有多个关于 Azure 的 python SDK 的 readthedocs 参考资料。但是,有些链接无法正常工作。天蓝干得好:)

其中一些: 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

第二次编辑:我得到了这个答案,上面的代码将返回给定公共 IP 地址的 vm id。不过,您可以看到它不是绝对优化的答案。因此,欢迎更好的答案。谢谢!

4

1 回答 1

1

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

我们做了一些重定向,但不幸的是,在 RTD 上无法进行全局重定向,所以有些页面是 404:/

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

你在网络客户端中得到这个,作为 client.public_ip_addresses

于 2018-05-11T17:38:26.800 回答