0

这类似于Is there any python API that can get the IP address (internal or external) of Virtual machine in Azure类似,但我想获取 azure VM 的 infiniband IP 地址。

到目前为止,我可以在 VMSS 中获取 VM 的 NIC,但这只能让我查询 eth0 的私有 IP 地址。如何获取其他接口的 IP 地址?

理想情况下,我想在 Python 中执行此操作


from azure.mgmt.network import NetworkManagementClient
self.network_client = NetworkManagementClient(credentials, AZURE_SUBSCRIPTION_ID)

# get the private IP of a network interface
nic_name = 'redacted'
network_client.network_interfaces.get(GROUP_NAME, nic_name)
private_ip = nic.ip_configurations[0].private_ip_address

4

1 回答 1

0

如果需要获取 VMSS 实例中的所有 VM/网络接口的 IP,您可以使用官方的Azure SDK for Python,如下所示:

# Imports
from azure.common.credentials import ServicePrincipalCredentials
from azure.mgmt.network import NetworkManagementClient

# Set subscription ID
SUBSCRIPTION_ID = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'


def get_credentials():
    credentials = ServicePrincipalCredentials(
        client_id='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        secret='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        tenant='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
    )

    return credentials


# Get credentials
credentials = get_credentials()


# Initialize management client
network_client = NetworkManagementClient(
    credentials,
    SUBSCRIPTION_ID
)


def get_vmss_vm_ips():

    # List all network interfaces of the VMSS instance
    vmss_nics = network_client.network_interfaces.list_virtual_machine_scale_set_network_interfaces(
        "<VMSS Resource group name>", "<VMSS instance name>")

    niclist = [nic.serialize() for nic in vmss_nics]

    print "IP addresses in the given VM Scale Set:"

    for nic in niclist:
        ipconf = nic['properties']['ipConfigurations']

        for ip in ipconf:
            print ip['properties']['privateIPAddress']


# Get all IPs of VMs in VMSS
get_vmss_vm_ips()

请注意,该network_client.network_interfaces.get()方法仅获取有关指定网络接口的信息,而该list_virtual_machine_scale_set_network_interfaces()方法获取虚拟机规模集中的所有网络接口。

参考:

希望这可以帮助!如果不是这样,请告诉我,我们可以进一步探索。

于 2019-11-19T12:53:59.143 回答